; Copyright (c) 2016, Intel Corporation
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
;  * Redistributions of source code must retain the above copyright notice,
;    this list of conditions and the following disclaimer.
;  * Redistributions in binary form must reproduce the above copyright notice,
;    this list of conditions and the following disclaimer in the documentation
;    and/or other materials provided with the distribution.
;  * Neither the name of Intel Corporation nor the names of its contributors
;    may be used to endorse or promote products derived from this software
;    without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
; POSSIBILITY OF SUCH DAMAGE.

; Test a PIP and VMCS binding to an in-flight asynchronous branch.
;

org 0x1000
bits 64

; @pt p0: psb()
; @pt p1: mode.exec(64bit)
; @pt p2: fup(3: %l0)
; @pt p3: psbend()
l0: nop

; @pt p4: fup(1: %l1)
l1: hlt

; @pt p5: pip(0xcdcdc0)
; @pt p6: vmcs(0xcdcdc000)
; @pt p7: tip(3: %l2)
l2: nop

; @pt p8:fup(1: %l3)
; @pt p9:tip.pgd(0: %l3)
l3: hlt


; @pt .exp(ptdump)
;%0p0  psb
;%0p1  mode.exec  cs.l
;%0p2  fup        3: %?l0
;%0p3  psbend
;%0p4  fup        1: %?l1.2
;%0p5  pip        cdcdc0        cr3  0000000000cdcdc0
;%0p6  vmcs       cdcdc000      vmcs 00000000cdcdc000
;%0p7  tip        3: %?l2
;%0p8  fup        1: %?l3.2
;%0p9  tip.pgd    0: %?l3.0


; @pt .exp(ptxed)
;%0l0
;[interrupt]
;%0l2
;[disabled]
