// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package argon2

var useSSE4 bool

func (, ,  *block,  bool) {
	var  block
	for  := range  {
		[] = [] ^ []
	}
	for  := 0;  < blockLength;  += 16 {
		blamkaGeneric(
			&[+0], &[+1], &[+2], &[+3],
			&[+4], &[+5], &[+6], &[+7],
			&[+8], &[+9], &[+10], &[+11],
			&[+12], &[+13], &[+14], &[+15],
		)
	}
	for  := 0;  < blockLength/8;  += 2 {
		blamkaGeneric(
			&[], &[+1], &[16+], &[16++1],
			&[32+], &[32++1], &[48+], &[48++1],
			&[64+], &[64++1], &[80+], &[80++1],
			&[96+], &[96++1], &[112+], &[112++1],
		)
	}
	if  {
		for  := range  {
			[] ^= [] ^ [] ^ []
		}
	} else {
		for  := range  {
			[] = [] ^ [] ^ []
		}
	}
}

func (, , , , , , , , , , , , , , ,  *uint64) {
	, , ,  := *, *, *, *
	, , ,  := *, *, *, *
	, , ,  := *, *, *, *
	, , ,  := *, *, *, *

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>32 | <<32
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>24 | <<40

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>16 | <<48
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>63 | <<1

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>32 | <<32
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>24 | <<40

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>16 | <<48
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>63 | <<1

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>32 | <<32
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>24 | <<40

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>16 | <<48
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>63 | <<1

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>32 | <<32
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>24 | <<40

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>16 | <<48
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>63 | <<1

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>32 | <<32
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>24 | <<40

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>16 | <<48
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>63 | <<1

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>32 | <<32
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>24 | <<40

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>16 | <<48
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>63 | <<1

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>32 | <<32
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>24 | <<40

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>16 | <<48
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>63 | <<1

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>32 | <<32
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>24 | <<40

	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>16 | <<48
	 +=  + 2*uint64(uint32())*uint64(uint32())
	 ^= 
	 = >>63 | <<1

	*, *, *, * = , , , 
	*, *, *, * = , , , 
	*, *, *, * = , , , 
	*, *, *, * = , , , 
}