source: trunk/packages/xen-3.1/xen-3.1/xen/arch/ia64/tools/privify/privify.h @ 34

Last change on this file since 34 was 34, checked in by hartmans, 18 years ago

Add xen and xen-common

File size: 1.5 KB
Line 
1/*
2 * Binary translate privilege-sensitive ops to privileged
3 *
4 * Copyright (C) 2004 Hewlett-Packard Co.
5 *      Dan Magenheimer (dan.magenheimer@hp.com)
6 *
7 */
8
9/*
10 * Macros to replace privilege-sensitive instructions (and reads from
11 * write-trapping registers) with privileged/trapping instructions as follows:
12 *      mov rx=ar.cflg -> mov ar.cflg=r(x+64) [**]
13 *      mov rx=ar.ky -> mov ar.ky=r(x+64)
14 *      fc rx -> ptc r(x+64)
15 *      thash rx=ry -> tak rx=r(y+64)
16 *      ttag rx=ry -> tpa rx=r(y+64)
17 *      mov rx=cpuid[ry] -> mov r(x+64)=rr[ry]
18 *      mov rx=pmd[ry] -> mov r(x+64)=pmc[ry] [**]
19 *      cover -> break.b 0x1fffff
20 *  [**] not implemented yet
21 */
22
23#define notimpl(s) printk(s##" not implemented");
24#define privify_mov_from_cflg_m(i) do { notimpl("mov from ar.cflg"); } while(0)
25#define privify_mov_from_cflg_i(i) do { notimpl("mov from ar.cflg"); } while(0)
26#define privify_mov_from_kr_m(i) do { i.M31.x6 = 0x2a; i.M29.r2 = i.M31.r1 + 64; } while(0)
27#define privify_mov_from_kr_i(i) do { i.I28.x6 = 0x2a; i.I26.r2 = i.I28.r1 + 64; } while(0)
28#define privify_fc(i) do { i.M28.x6 = 0x34; i.M28.r3 = i.M28.r3 + 64; } while(0)
29#define privify_thash(i) do { i.M46.x6 = 0x1f; i.M46.r3 += 64; } while(0)
30#define privify_ttag(i) do { i.M46.x6 = 0x1f; i.M46.r3 += 64; } while(0)
31#define privify_mov_from_cpuid(i) do { i.M43.x6 = 0x10; i.M43.r1 += 64; } while(0)
32#define privify_mov_from_pmd(i) do { notimpl("mov from pmd"); } while(0)
33#define privify_cover(x) do { x.B8.x6 = 0x0; x.B9.imm20 = 0xfffff; x.B9.i = 0x1; } while(0)
34
Note: See TracBrowser for help on using the repository browser.