#BEGIN_LEGAL
#
#Copyright (c) 2020 Intel Corporation
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#  
#END_LEGAL

{
ICLASS    : XSTORE
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_RNG
ISA_SET   : VIA_PADLOCK_RNG
PATTERN   : 0x0F 0xA7 MOD[0b11] REG[0b000] RM[0b000]  not_refining
OPERANDS  : MEM0:w:SUPP:b REG0=OrCX():r:SUPP REG1=OrDX():rw:SUPP REG2=OrAX():w:SUPP BASE0=ArDI():rw:SUPP  SEG0=FINAL_ESEG():r:SUPP
}


{
ICLASS    : REP_XSTORE
DISASM    : xstore
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_RNG
ISA_SET   : VIA_PADLOCK_RNG
ATTRIBUTES : REP  FIXED_BASE0 BYTEOP
PATTERN   : 0x0F 0xA7 MOD[0b11] REG[0b000] RM[0b000] f3_refining_prefix
OPERANDS  : MEM0:w:SUPP:b REG0=OrCX():rw:SUPP REG1=OrDX():rw:SUPP REG2=OrAX():w:SUPP BASE0=ArDI():rw:SUPP  SEG0=FINAL_ESEG():r:SUPP
}


{
ICLASS    : REP_XCRYPTECB
DISASM    : xcryptecb 
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_AES
ISA_SET   : VIA_PADLOCK_AES
ATTRIBUTES : REP  FIXED_BASE0 BYTEOP
PATTERN   : 0x0F 0xA7 MOD[0b11] REG[0b001] RM[0b000] f3_refining_prefix
OPERANDS  : MEM0:w:SUPP:b REG0=OrCX():rw:SUPP REG1=OrDX():r:SUPP REG2=OrBX():r:SUPP  BASE0=ArDI():rw:SUPP  SEG0=FINAL_ESEG():r:SUPP  MEM1:cr:SUPP:b BASE1=ArSI():rcw:SUPP SEG1=FINAL_DSEG1():r:SUPP
}

{
ICLASS    : REP_XCRYPTCBC
DISASM    : xcryptcbc
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_AES
ISA_SET   : VIA_PADLOCK_AES
ATTRIBUTES : REP  FIXED_BASE0 BYTEOP
PATTERN   : 0x0F 0xA7 MOD[0b11] REG[0b010] RM[0b000] f3_refining_prefix
COMMENT   : rAX contains a pointer to memory using ES segment.
OPERANDS  : MEM0:w:SUPP:b REG0=OrCX():rw:SUPP REG1=OrDX():r:SUPP REG2=OrBX():r:SUPP REG3=ArAX():r:SUPP  BASE0=ArDI():rw:SUPP  SEG0=FINAL_ESEG():r:SUPP  MEM1:cr:SUPP:b BASE1=ArSI():rcw:SUPP SEG1=FINAL_DSEG1():r:SUPP
}


{
ICLASS    : REP_XCRYPTCTR
DISASM    : xcryptctr
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_AES
ISA_SET   : VIA_PADLOCK_AES
ATTRIBUTES : REP  FIXED_BASE0 BYTEOP
PATTERN   : 0x0F 0xA7 MOD[0b11] REG[0b011] RM[0b000] f3_refining_prefix
COMMENT   : rAX contains a pointer to memory using ES segment.
OPERANDS  : MEM0:w:SUPP:b REG0=OrCX():rw:SUPP REG1=OrDX():r:SUPP REG2=OrBX():r:SUPP REG3=ArAX():r:SUPP  BASE0=ArDI():rw:SUPP  SEG0=FINAL_ESEG():r:SUPP  MEM1:cr:SUPP:b BASE1=ArSI():rcw:SUPP SEG1=FINAL_DSEG1():r:SUPP
}
{
ICLASS    : REP_XCRYPTCFB
DISASM    : xcryptcfb
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_AES
ISA_SET   : VIA_PADLOCK_AES
ATTRIBUTES : REP  FIXED_BASE0 BYTEOP
PATTERN   : 0x0F 0xA7 MOD[0b11] REG[0b100] RM[0b000] f3_refining_prefix
COMMENT   : rAX contains a pointer to memory using ES segment.
OPERANDS  : MEM0:w:SUPP:b REG0=OrCX():rw:SUPP REG1=OrDX():r:SUPP REG2=OrBX():r:SUPP REG3=ArAX():r:SUPP  BASE0=ArDI():rw:SUPP  SEG0=FINAL_ESEG():r:SUPP  MEM1:cr:SUPP:b BASE1=ArSI():rcw:SUPP SEG1=FINAL_DSEG1():r:SUPP
}
{
ICLASS    : REP_XCRYPTOFB
DISASM    : xcryptofb
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_AES
ISA_SET   : VIA_PADLOCK_AES
ATTRIBUTES : REP  FIXED_BASE0 BYTEOP
PATTERN   : 0x0F 0xA7 MOD[0b11] REG[0b101] RM[0b000]  f3_refining_prefix
COMMENT   : rAX contains a pointer to memory using ES segment.
OPERANDS  : MEM0:w:SUPP:b REG0=OrCX():rw:SUPP REG1=OrDX():r:SUPP REG2=OrBX():r:SUPP REG3=ArAX():r:SUPP  BASE0=ArDI():rw:SUPP  SEG0=FINAL_ESEG():r:SUPP  MEM1:cr:SUPP:b BASE1=ArSI():rcw:SUPP SEG1=FINAL_DSEG1():r:SUPP
}



{
ICLASS    : REP_XSHA1
DISASM    : xsha1
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_SHA
ISA_SET   : VIA_PADLOCK_SHA
ATTRIBUTES : REP FIXED_BASE0 BYTEOP
PATTERN   : 0x0F 0xA6 MOD[0b11] REG[0b001] RM[0b000] f3_refining_prefix
OPERANDS  : REG0=ArAX():rcw:SUPP REG1=OrCX():rcw:SUPP MEM0:w:SUPP:b  BASE0=ArSI():rw:SUPP  SEG0=FINAL_ESEG():r:SUPP MEM1:r:SUPP:b  BASE1=ArDI():r:SUPP   SEG1=FINAL_ESEG1():r:SUPP
}



{
ICLASS    : REP_XSHA256
DISASM    : xsha256
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_SHA
ISA_SET   : VIA_PADLOCK_SHA
ATTRIBUTES : REP FIXED_BASE0 BYTEOP
PATTERN   : 0x0F 0xA6 MOD[0b11] REG[0b010] RM[0b000] f3_refining_prefix
OPERANDS  : REG0=ArAX():rcw:SUPP REG1=OrCX():rcw:SUPP MEM0:w:SUPP:b  BASE0=ArSI():rw:SUPP  SEG0=FINAL_ESEG():r:SUPP MEM1:r:SUPP:b  BASE1=ArDI():r:SUPP   SEG1=FINAL_ESEG1():r:SUPP
}



{
ICLASS    : REP_MONTMUL
DISASM    : montmul
CPL       : 3
CATEGORY  : VIA_PADLOCK
EXTENSION : VIA_PADLOCK_MONTMUL
ISA_SET   : VIA_PADLOCK_MONTMUL
ATTRIBUTES : REP FIXED_BASE0
COMMENT   : EAX output value undefined, so list as write.

PATTERN   : 0x0F 0xA6 MOD[0b11] REG[0b000] RM[0b000] f3_refining_prefix eamode16
OPERANDS  : REG0=XED_REG_EAX:rw:SUPP \
            REG1=XED_REG_ECX:rw:SUPP \
            REG2=XED_REG_EDX:w:SUPP \
            MEM0:rw:SUPP:pmmsz16 \
            BASE0=ArSI():r:SUPP \
            SEG0=FINAL_ESEG():r:SUPP
            
PATTERN   : 0x0F 0xA6 MOD[0b11] REG[0b000] RM[0b000] f3_refining_prefix eamode32
OPERANDS  : REG0=XED_REG_EAX:rw:SUPP \
            REG1=XED_REG_ECX:rw:SUPP \
            REG2=XED_REG_EDX:w:SUPP \
            MEM0:rw:SUPP:pmmsz32 \
            BASE0=ArSI():r:SUPP \
            SEG0=FINAL_ESEG():r:SUPP
}



