#BEGIN_LEGAL
#
#Copyright (c) 2016 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

########  XOP #################################
SEQUENCE XOP_ENC_BIND
    XOP_TYPE_ENC_BIND
    VEX_REXR_ENC_BIND
    XOP_REXXB_ENC_BIND
    XOP_MAP_ENC_BIND
    VEX_REG_ENC_BIND
    VEX_ESCVL_ENC_BIND

SEQUENCE  XOP_ENC_EMIT
    XOP_TYPE_ENC_EMIT
    VEX_REXR_ENC_EMIT
    XOP_REXXB_ENC_EMIT
    XOP_MAP_ENC_EMIT
    VEX_REG_ENC_EMIT
    VEX_ESCVL_ENC_EMIT

##############################################

VEXED_REX()::
VEXVALID=3 -> XOP_ENC()

XOP_TYPE_ENC()::
XMAP8       -> 0x8F
XMAP9       -> 0x8F
XMAPA       -> 0x8F
otherwise   -> error

XOP_MAP_ENC()::
XMAP8  REXW[w] -> 0b0_1000 w
XMAP9  REXW[w] -> 0b0_1001 w
XMAPA  REXW[w] -> 0b0_1010 w
otherwise      -> error

XOP_REXXB_ENC()::
mode64  REXX=0 REXB=0  -> 0b11
mode64  REXX=1 REXB=0  -> 0b01
mode64  REXX=0 REXB=1  -> 0b10
mode64  REXX=1 REXB=1  -> 0b00
not64   REXX=0 REXB=0  -> 0b11
not64   REXX=1 REXB=0  -> error
not64   REXX=0 REXB=1  -> error
not64   REXX=1 REXB=1  -> error
otherwise              -> nothing
