//go:build amd64 && !appengine && !noasm && gc

package zstd

import (
	
)

// The shared decode/decodeSync/executeSimple wrappers and context structs live
// in seqdec_asm.go; this file only declares the amd64 asm routines and the
// dispatch helpers that pick the BMI2 / non-BMI2 (and 56-bit / safe) variant.

// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm.
//
// Please refer to seqdec_generic.go for the reference implementation.
//
//go:noescape
func ( *sequenceDecs,  *bitReader,  *decodeAsmContext) int

// sequenceDecs_decode_56_amd64 implements the main loop of sequenceDecs in x86 asm.
//
//go:noescape
func ( *sequenceDecs,  *bitReader,  *decodeAsmContext) int

// sequenceDecs_decode_bmi2 implements the main loop of sequenceDecs in x86 asm with BMI2 extensions.
//
//go:noescape
func ( *sequenceDecs,  *bitReader,  *decodeAsmContext) int

// sequenceDecs_decode_56_bmi2 implements the main loop of sequenceDecs in x86 asm with BMI2 extensions.
//
//go:noescape
func ( *sequenceDecs,  *bitReader,  *decodeAsmContext) int

// decodeAsm runs the sequenceDecs decode loop, choosing the BMI2 / 56-bit variant.
func ( *sequenceDecs,  *bitReader,  *decodeAsmContext,  bool) int {
	if cpuinfo.HasBMI2() {
		if  {
			return sequenceDecs_decode_56_bmi2(, , )
		}
		return sequenceDecs_decode_bmi2(, , )
	}
	if  {
		return sequenceDecs_decode_56_amd64(, , )
	}
	return sequenceDecs_decode_amd64(, , )
}

// sequenceDecs_decodeSync_amd64 implements the main loop of sequenceDecs.decodeSync in x86 asm.
//
// Please refer to seqdec_generic.go for the reference implementation.
//
//go:noescape
func ( *sequenceDecs,  *bitReader,  *decodeSyncAsmContext) int

// sequenceDecs_decodeSync_bmi2 implements the main loop of sequenceDecs.decodeSync in x86 asm with BMI2 extensions.
//
//go:noescape
func ( *sequenceDecs,  *bitReader,  *decodeSyncAsmContext) int

// sequenceDecs_decodeSync_safe_amd64 does the same as above, but does not write more than output buffer.
//
//go:noescape
func ( *sequenceDecs,  *bitReader,  *decodeSyncAsmContext) int

// sequenceDecs_decodeSync_safe_bmi2 does the same as above, but does not write more than output buffer.
//
//go:noescape
func ( *sequenceDecs,  *bitReader,  *decodeSyncAsmContext) int

// decodeSyncAsm runs the decodeSync loop, choosing the BMI2 / safe variant.
func ( *sequenceDecs,  *bitReader,  *decodeSyncAsmContext,  bool) int {
	if cpuinfo.HasBMI2() {
		if  {
			return sequenceDecs_decodeSync_safe_bmi2(, , )
		}
		return sequenceDecs_decodeSync_bmi2(, , )
	}
	if  {
		return sequenceDecs_decodeSync_safe_amd64(, , )
	}
	return sequenceDecs_decodeSync_amd64(, , )
}

// sequenceDecs_executeSimple_amd64 implements the main loop of sequenceDecs.executeSimple in x86 asm.
//
// Returns false if a match offset is too big.
//
// Please refer to seqdec_generic.go for the reference implementation.
//
//go:noescape
func ( *executeAsmContext) bool

// Same as above, but with safe memcopies
//
//go:noescape
func ( *executeAsmContext) bool

// executeSimpleAsm runs the executeSimple loop, choosing the safe variant.
func ( *executeAsmContext,  bool) bool {
	if  {
		return sequenceDecs_executeSimple_safe_amd64()
	}
	return sequenceDecs_executeSimple_amd64()
}