1# Copyright (c) 2014 The Native Client Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Proof for adding 3 operand xmm/ymm/memory packed single precision ops."""
6
7import proof_tools
8from proof_tools_templates import XmmYmmOrMemory3operand
9
10
11# Packed FP-single-precision AVX1 Instructions of the form:
12# src1 is an xmm or ymm register.
13# src2 is an xmm or ymm register or memory operand.
14# dest is an xmm or ymm register.
15MNEMONICS = [
16    'vaddps', 'vaddsubps', 'vandnps', 'vandps', 'vdivps', 'vhaddps',
17    'vhsubps', 'vmaxps', 'vminps', 'vmulps', 'vorps', 'vsubps', 'vunpckhps',
18    'vunpcklps', 'vxorps'
19]
20
21
22def Validate(trie_diffs, bitness):
23  """Validates that all allowed patterns of MNEMONICS are added."""
24  expected_adds = set()
25  for mnemonic in MNEMONICS:
26    expected_adds.update(XmmYmmOrMemory3operand(mnemonic_name=mnemonic,
27                                                bitness=bitness))
28
29  proof_tools.AssertDiffSetEquals(
30      trie_diffs,
31      expected_adds=expected_adds,
32      expected_removes=set())
33
34if __name__ == '__main__':
35  proof_tools.RunProof(proof_tools.ParseStandardOpts(), Validate)
36