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

# SPARSE OPERATIONS REQUIRE A SPECIAL MODRM BYTE and a mandatory VSIB BYTE

VMODRM_YMM()::
 MOD=0b00  VSIB_YMM()             | 
 MOD=0b01  VSIB_YMM() MEMDISP8()  | 
 MOD=0b10  VSIB_YMM() MEMDISP32() | 


VMODRM_XMM()::
 MOD=0b00  VSIB_XMM()             | 
 MOD=0b01  VSIB_XMM() MEMDISP8()  | 
 MOD=0b10  VSIB_XMM() MEMDISP32() | 

VSIB_YMM()::
SIBSCALE[0b00] SIBINDEX[iii] SIBBASE[bbb] VSIB_BASE()  | INDEX=VSIB_INDEX_YMM()  SCALE=1  
SIBSCALE[0b01] SIBINDEX[iii] SIBBASE[bbb] VSIB_BASE()  | INDEX=VSIB_INDEX_YMM()  SCALE=2  
SIBSCALE[0b10] SIBINDEX[iii] SIBBASE[bbb] VSIB_BASE()  | INDEX=VSIB_INDEX_YMM()  SCALE=4  
SIBSCALE[0b11] SIBINDEX[iii] SIBBASE[bbb] VSIB_BASE()  | INDEX=VSIB_INDEX_YMM()  SCALE=8  

VSIB_XMM()::
SIBSCALE[0b00] SIBINDEX[iii] SIBBASE[bbb] VSIB_BASE()  | INDEX=VSIB_INDEX_XMM()  SCALE=1  
SIBSCALE[0b01] SIBINDEX[iii] SIBBASE[bbb] VSIB_BASE()  | INDEX=VSIB_INDEX_XMM()  SCALE=2  
SIBSCALE[0b10] SIBINDEX[iii] SIBBASE[bbb] VSIB_BASE()  | INDEX=VSIB_INDEX_XMM()  SCALE=4  
SIBSCALE[0b11] SIBINDEX[iii] SIBBASE[bbb] VSIB_BASE()  | INDEX=VSIB_INDEX_XMM()  SCALE=8  

xed_reg_enum_t VSIB_INDEX_YMM()::
REXX=0   SIBINDEX=0 | OUTREG=XED_REG_YMM0
REXX=0   SIBINDEX=1 | OUTREG=XED_REG_YMM1
REXX=0   SIBINDEX=2 | OUTREG=XED_REG_YMM2
REXX=0   SIBINDEX=3 | OUTREG=XED_REG_YMM3
REXX=0   SIBINDEX=4 | OUTREG=XED_REG_YMM4
REXX=0   SIBINDEX=5 | OUTREG=XED_REG_YMM5
REXX=0   SIBINDEX=6 | OUTREG=XED_REG_YMM6
REXX=0   SIBINDEX=7 | OUTREG=XED_REG_YMM7
REXX=1   SIBINDEX=0 | OUTREG=XED_REG_YMM8
REXX=1   SIBINDEX=1 | OUTREG=XED_REG_YMM9
REXX=1   SIBINDEX=2 | OUTREG=XED_REG_YMM10
REXX=1   SIBINDEX=3 | OUTREG=XED_REG_YMM11
REXX=1   SIBINDEX=4 | OUTREG=XED_REG_YMM12
REXX=1   SIBINDEX=5 | OUTREG=XED_REG_YMM13
REXX=1   SIBINDEX=6 | OUTREG=XED_REG_YMM14
REXX=1   SIBINDEX=7 | OUTREG=XED_REG_YMM15


xed_reg_enum_t VSIB_INDEX_XMM()::
REXX=0   SIBINDEX=0 | OUTREG=XED_REG_XMM0
REXX=0   SIBINDEX=1 | OUTREG=XED_REG_XMM1
REXX=0   SIBINDEX=2 | OUTREG=XED_REG_XMM2
REXX=0   SIBINDEX=3 | OUTREG=XED_REG_XMM3
REXX=0   SIBINDEX=4 | OUTREG=XED_REG_XMM4
REXX=0   SIBINDEX=5 | OUTREG=XED_REG_XMM5
REXX=0   SIBINDEX=6 | OUTREG=XED_REG_XMM6
REXX=0   SIBINDEX=7 | OUTREG=XED_REG_XMM7
REXX=1   SIBINDEX=0 | OUTREG=XED_REG_XMM8
REXX=1   SIBINDEX=1 | OUTREG=XED_REG_XMM9
REXX=1   SIBINDEX=2 | OUTREG=XED_REG_XMM10
REXX=1   SIBINDEX=3 | OUTREG=XED_REG_XMM11
REXX=1   SIBINDEX=4 | OUTREG=XED_REG_XMM12
REXX=1   SIBINDEX=5 | OUTREG=XED_REG_XMM13
REXX=1   SIBINDEX=6 | OUTREG=XED_REG_XMM14
REXX=1   SIBINDEX=7 | OUTREG=XED_REG_XMM15


VSIB_BASE()::
REXB=0 SIBBASE=0 | BASE0=ArAX() SEG0=FINAL_DSEG()
REXB=0 SIBBASE=1 | BASE0=ArCX() SEG0=FINAL_DSEG()
REXB=0 SIBBASE=2 | BASE0=ArDX() SEG0=FINAL_DSEG()
REXB=0 SIBBASE=3 | BASE0=ArBX() SEG0=FINAL_DSEG()
REXB=0 SIBBASE=4 | BASE0=ArSP() SEG0=FINAL_SSEG()

REXB=0 SIBBASE=5 MOD=0  MEMDISP32() | BASE0=XED_REG_INVALID SEG0=FINAL_DSEG()
REXB=0 SIBBASE=5 MOD!=0             | BASE0=ArBP() SEG0=FINAL_SSEG()

REXB=0 SIBBASE=6 | BASE0=ArSI() SEG0=FINAL_DSEG()
REXB=0 SIBBASE=7 | BASE0=ArDI() SEG0=FINAL_DSEG()
REXB=1 SIBBASE=0 | BASE0=Ar8() SEG0=FINAL_DSEG()
REXB=1 SIBBASE=1 | BASE0=Ar9() SEG0=FINAL_DSEG()
REXB=1 SIBBASE=2 | BASE0=Ar10() SEG0=FINAL_DSEG()
REXB=1 SIBBASE=3 | BASE0=Ar11() SEG0=FINAL_DSEG()
REXB=1 SIBBASE=4 | BASE0=Ar12() SEG0=FINAL_DSEG()

REXB=1 SIBBASE=5 MOD=0  MEMDISP32() | BASE0=XED_REG_INVALID SEG0=FINAL_DSEG()
REXB=1 SIBBASE=5 MOD!=0 | BASE0=Ar13() SEG0=FINAL_DSEG()

REXB=1 SIBBASE=6 | BASE0=Ar14() SEG0=FINAL_DSEG()
REXB=1 SIBBASE=7 | BASE0=Ar15() SEG0=FINAL_DSEG()



  
  



