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