1c1
< // Copyright (c) 2006 The Regents of The University of Michigan
---
> // Copyright (c) 2006-2007 The Regents of The University of Michigan
209a210,212
> if(%(tlCheck)s)
> return new IllegalInstruction;
>
218c221
< def doPrivFormat(code, checkCode, name, Name, opt_flags):
---
> def doPrivFormat(code, checkCode, name, Name, tlCheck, opt_flags):
239c242,243
< {"code": code, "check": checkCode, "reg_name": regName},
---
> {"code": code, "check": checkCode,
> "tlCheck": tlCheck, "reg_name": regName},
249c253,254
< {"code": immCode, "check": checkCode, "reg_name": regName},
---
> {"code": immCode, "check": checkCode,
> "tlCheck": tlCheck, "reg_name": regName},
263,264c268,273
< def format Priv(code, *opt_flags) {{
< checkCode = "!(Pstate<2:> || Hpstate<2:>)"
---
> def format Priv(code, extraCond=true, checkTl=false, *opt_flags) {{
> checkCode = "(%s) && !(Pstate<2:> || Hpstate<2:>)" % extraCond
> if checkTl != "false":
> tlCheck = "Tl == 0"
> else:
> tlCheck = "false"
267c276
< checkCode, name, Name, opt_flags)
---
> checkCode, name, Name, tlCheck, opt_flags)
270c279
< def format NoPriv(code, *opt_flags) {{
---
> def format NoPriv(code, checkTl=false, *opt_flags) {{
274a284,287
> if checkTl != "false":
> tlCheck = "Tl == 0"
> else:
> tlCheck = "false"
277c290
< checkCode, name, Name, opt_flags)
---
> checkCode, name, Name, tlCheck, opt_flags)
280,287c293
< def format PrivCheck(code, extraCheckCode, *opt_flags) {{
< checkCode = "(%s) && !(Pstate<2:> || Hpstate<2:>)" % extraCheckCode
< (header_output, decoder_output,
< exec_output, decode_block) = doPrivFormat(code,
< checkCode, name, Name, opt_flags)
< }};
<
< def format HPriv(code, *opt_flags) {{
---
> def format HPriv(code, checkTl=false, *opt_flags) {{
288a295,298
> if checkTl != "false":
> tlCheck = "Tl == 0"
> else:
> tlCheck = "false"
291c301
< checkCode, name, Name, opt_flags)
---
> checkCode, name, Name, tlCheck, opt_flags)