; 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 that FUP + TIP.PGD disables tracing as part of the asynchronous
; branch.
;
; Variant: Tracing is disabled after an interrupt before executing the first
;          instruction of the interrupt handler (e.g. due to another interrupt).
;

org 0x100000
bits 64

; @pt p1: psb()
; @pt p2: fup(3: %l1)
; @pt p3: mode.exec(64bit)
; @pt p4: psbend()
l1: nop
l2: hlt

; @pt p5: fup(1: %l2)
; @pt p6: tip(3: %l3)
l3: hlt
l4: hlt

; @pt p7: fup(1: %l3)
; @pt p8: tip.pgd(0: %l4)


; @pt .exp(ptxed)
;%0l1 # nop
;[interrupt]
;[disabled]


; @pt .exp(ptdump)
;%0p1  psb
;%0p2  fup        3: %0l1
;%0p3  mode.exec  cs.l
;%0p4  psbend
;%0p5  fup        1: %?l2.2
;%0p6  tip        3: %?l3
;%0p7  fup        1: %?l3.2
;%0p8  tip.pgd    0: %?l4.0
