| // Copyright 2018 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. |

| // func xorBytesSSE2(dst, a, b *byte, n int) |

| TEXT ·xorBytesSSE2(SB), NOSPLIT, $0 |

| TESTQ $15, DX // AND 15 & len, if not zero jump to not_aligned. |

| MOVQ $0, AX // position in slices |

| MOVOU (SI)(AX*1), X0 // XOR 16byte forwards. |

| SUBQ $1, DX // XOR 1byte backwards. |

| TESTQ $7, DX // AND 7 & len, if not zero jump to loop_1b. |

| CMPQ DX, $0 // if len is 0, ret. |

| TESTQ $15, DX // AND 15 & len, if zero jump to aligned. |

| TESTQ $7, DX // AND $7 & len, if not zero jump to loop_1b. |

| SUBQ $8, DX // XOR 8bytes backwards. |

| CMPQ DX, $16 // if len is greater or equal 16 here, it must be aligned. |