#include "/srv/home/gc-sdk/ipu-stack/device/static_runtime.S"
#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_0
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 0
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 16
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 0
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 2
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_0_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_0_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_0_done
.Lunpack_0_matrix:
	mov $m4, $m2
.Lunpack_0_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_0_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_0_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_0_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_0_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_0_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_0_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_0_store
	mov $a1, $azero
#endif
.Lunpack_0_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_0_columns
	add $m4, $m4, 12
	bri .Lunpack_0_rows
.Lunpack_0_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_0_matrix
.Lunpack_0_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_1
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 0
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 16
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 0
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 2
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_1_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_1_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_1_done
.Lunpack_1_matrix:
	mov $m4, $m2
.Lunpack_1_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_1_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_1_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_1_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_1_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_1_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_1_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_1_store
	mov $a1, $azero
#endif
.Lunpack_1_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_1_columns
	add $m4, $m4, 12
	bri .Lunpack_1_rows
.Lunpack_1_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_1_matrix
.Lunpack_1_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_2
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 1
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 16
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 1
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 2
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_2_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_2_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_2_done
.Lunpack_2_matrix:
	mov $m4, $m2
.Lunpack_2_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_2_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_2_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_2_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_2_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_2_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_2_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_2_store
	mov $a1, $azero
#endif
.Lunpack_2_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_2_columns
	add $m4, $m4, 12
	bri .Lunpack_2_rows
.Lunpack_2_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_2_matrix
.Lunpack_2_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_3
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 1
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 16
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 1
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 2
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_3_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_3_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_3_done
.Lunpack_3_matrix:
	mov $m4, $m2
.Lunpack_3_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_3_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_3_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_3_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_3_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_3_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_3_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_3_store
	mov $a1, $azero
#endif
.Lunpack_3_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_3_columns
	add $m4, $m4, 12
	bri .Lunpack_3_rows
.Lunpack_3_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_3_matrix
.Lunpack_3_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_4
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 9
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 16
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 114
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 114
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_4_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_4_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_4_done
.Lunpack_4_matrix:
	mov $m4, $m2
.Lunpack_4_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_4_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_4_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_4_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_4_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_4_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_4_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_4_store
	mov $a1, $azero
#endif
.Lunpack_4_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_4_columns
	add $m4, $m4, 12
	bri .Lunpack_4_rows
.Lunpack_4_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_4_matrix
.Lunpack_4_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_5
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 9
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 16
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 114
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 114
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_5_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_5_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_5_done
.Lunpack_5_matrix:
	mov $m4, $m2
.Lunpack_5_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_5_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_5_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_5_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_5_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_5_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_5_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_5_store
	mov $a1, $azero
#endif
.Lunpack_5_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_5_columns
	add $m4, $m4, 12
	bri .Lunpack_5_rows
.Lunpack_5_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_5_matrix
.Lunpack_5_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_6
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 16
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 16
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 116
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 116
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_6_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_6_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_6_done
.Lunpack_6_matrix:
	mov $m4, $m2
.Lunpack_6_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_6_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_6_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_6_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_6_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_6_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_6_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_6_store
	mov $a1, $azero
#endif
.Lunpack_6_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_6_columns
	add $m4, $m4, 12
	bri .Lunpack_6_rows
.Lunpack_6_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_6_matrix
.Lunpack_6_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_7
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 16
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 16
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 116
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 116
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_7_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_7_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_7_done
.Lunpack_7_matrix:
	mov $m4, $m2
.Lunpack_7_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_7_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_7_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_7_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_7_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_7_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_7_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_7_store
	mov $a1, $azero
#endif
.Lunpack_7_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_7_columns
	add $m4, $m4, 12
	bri .Lunpack_7_rows
.Lunpack_7_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_7_matrix
.Lunpack_7_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_8
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 17
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 32
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 7
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 8
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_8_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_8_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_8_done
.Lunpack_8_matrix:
	mov $m4, $m2
.Lunpack_8_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_8_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_8_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_8_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_8_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_8_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_8_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_8_store
	mov $a1, $azero
#endif
.Lunpack_8_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_8_columns
	add $m4, $m4, 12
	bri .Lunpack_8_rows
.Lunpack_8_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_8_matrix
.Lunpack_8_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_9
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 17
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 32
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 7
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 8
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_9_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_9_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_9_done
.Lunpack_9_matrix:
	mov $m4, $m2
.Lunpack_9_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_9_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_9_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_9_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_9_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_9_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_9_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_9_store
	mov $a1, $azero
#endif
.Lunpack_9_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_9_columns
	add $m4, $m4, 12
	bri .Lunpack_9_rows
.Lunpack_9_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_9_matrix
.Lunpack_9_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_10
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 31
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 32
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 65
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 66
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_10_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_10_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_10_done
.Lunpack_10_matrix:
	mov $m4, $m2
.Lunpack_10_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_10_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_10_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_10_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_10_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_10_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_10_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_10_store
	mov $a1, $azero
#endif
.Lunpack_10_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_10_columns
	add $m4, $m4, 12
	bri .Lunpack_10_rows
.Lunpack_10_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_10_matrix
.Lunpack_10_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_11
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 31
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 32
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 65
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 66
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_11_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_11_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_11_done
.Lunpack_11_matrix:
	mov $m4, $m2
.Lunpack_11_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_11_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_11_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_11_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_11_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_11_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_11_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_11_store
	mov $a1, $azero
#endif
.Lunpack_11_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_11_columns
	add $m4, $m4, 12
	bri .Lunpack_11_rows
.Lunpack_11_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_11_matrix
.Lunpack_11_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_12
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 48
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 48
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 128
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 128
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_12_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_12_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_12_done
.Lunpack_12_matrix:
	mov $m4, $m2
.Lunpack_12_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_12_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_12_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_12_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_12_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_12_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_12_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_12_store
	mov $a1, $azero
#endif
.Lunpack_12_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_12_columns
	add $m4, $m4, 12
	bri .Lunpack_12_rows
.Lunpack_12_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_12_matrix
.Lunpack_12_done:
	exitz $m15

#undef UNPACK_CALL_SYMBOL
#define UNPACK_CALL_SYMBOL unpack_check_13
#undef UNPACK_LOGICAL_ROWS
#define UNPACK_LOGICAL_ROWS 48
#undef UNPACK_PHYSICAL_ROWS
#define UNPACK_PHYSICAL_ROWS 48
#undef UNPACK_LOGICAL_COLUMNS
#define UNPACK_LOGICAL_COLUMNS 128
#undef UNPACK_PHYSICAL_COLUMNS
#define UNPACK_PHYSICAL_COLUMNS 128
#include "arch/gc_tile_defines.h"

// Transposed AMP stores each 16-row panel column-major. Transpose 2x2
// cells with word loads and lane shuffles; never perform FP arithmetic.

	.text
	.allow_optimizations
	.section .text.UNPACK_CALL_SYMBOL,"ax",@progbits
	.globl UNPACK_CALL_SYMBOL
	.p2align 2
	.type UNPACK_CALL_SYMBOL,@function
UNPACK_CALL_SYMBOL:
	.supervisor
	add $m11, $m11, -16
	st32 $m3, $m11, $m15, 0
	st32 $m2, $m11, $m15, 1
	st32 $m4, $m11, $m15, 2
	setzi $m0, .Lunpack_13_worker
	runall $m0, $m11, 0
	sync TEXCH_SYNCZONE_LOCAL
	add $m11, $m11, 16
	br $m10
	.size UNPACK_CALL_SYMBOL, .-UNPACK_CALL_SYMBOL

	.worker
	.p2align 3
.Lunpack_13_worker:
	ld32 $m0, $mvertex_base, $m15, 0
	ld32 $m1, $mvertex_base, $m15, 1
	ld32 $m3, $mvertex_base, $m15, 2
	get $m2, $WSR
	and $m2, $m2, CSR_W_WSR__CTXTID_M1__MASK
	shl $m2, $m2, 1
	brz $m3, .Lunpack_13_done
.Lunpack_13_matrix:
	mov $m4, $m2
.Lunpack_13_rows:
	setzi $m5, UNPACK_PHYSICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_13_next_matrix
	shr $m5, $m4, 4
	ldconst $m6, UNPACK_PHYSICAL_COLUMNS * 32
	mul $m5, $m5, $m6
	add $m6, $m0, $m5
	and $m5, $m4, 15
	shl $m5, $m5, 1
	add $m6, $m6, $m5
	ldconst $m5, UNPACK_PHYSICAL_COLUMNS * 2
	mul $m7, $m4, $m5
	add $m7, $m1, $m7
	add $m8, $m7, $m5
	zero $m9
.Lunpack_13_columns:
	mov $a0:1, $azeros
#if UNPACK_LOGICAL_ROWS < UNPACK_PHYSICAL_ROWS
	setzi $m5, UNPACK_LOGICAL_ROWS
	cmpult $m5, $m4, $m5
	brz $m5, .Lunpack_13_store
#endif
#if UNPACK_LOGICAL_COLUMNS < UNPACK_PHYSICAL_COLUMNS
	setzi $m5, UNPACK_LOGICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_13_store
#endif
	ld32 $a2, $m6, $m15, 0
	mov $a3, $azero
#if UNPACK_LOGICAL_COLUMNS % 2
	setzi $m5, UNPACK_LOGICAL_COLUMNS - 1
	cmpult $m5, $m9, $m5
	brz $m5, .Lunpack_13_shuffle
#endif
	ld32 $a3, $m6, $m15, 8
.Lunpack_13_shuffle:
	sort4x16lo $a0, $a2, $a3
	sort4x16hi $a1, $a2, $a3
#if UNPACK_LOGICAL_ROWS % 2
	setzi $m5, UNPACK_LOGICAL_ROWS - 1
	cmpeq $m5, $m4, $m5
	brz $m5, .Lunpack_13_store
	mov $a1, $azero
#endif
.Lunpack_13_store:
	st32 $a0, $m7, $m15, 0
	st32 $a1, $m8, $m15, 0
	add $m6, $m6, 64
	add $m7, $m7, 4
	add $m8, $m8, 4
	add $m9, $m9, 2
	setzi $m5, UNPACK_PHYSICAL_COLUMNS
	cmpult $m5, $m9, $m5
	brnz $m5, .Lunpack_13_columns
	add $m4, $m4, 12
	bri .Lunpack_13_rows
.Lunpack_13_next_matrix:
	ldconst $m5, UNPACK_PHYSICAL_ROWS * UNPACK_PHYSICAL_COLUMNS * 2
	add $m0, $m0, $m5
	add $m1, $m1, $m5
	add $m3, $m3, -1
	brnz $m3, .Lunpack_13_matrix
.Lunpack_13_done:
	exitz $m15

