
3:184
Volume 3: Instruction Reference
mov pr
mov — Move Predicates
Format:
(
qp
) mov
r
1
= pr
from_form
(
qp
) mov pr =
r
2
,
mask
17
to_form
(
qp
) mov pr.rot =
imm
44
to_rotate_form
Description:
The source operand is copied to the destination register.
For moving the predicates to a GR, PR i is copied to bit position i within GR
r
1
.
For moving to the predicates, the source can either be a general register, or an
immediate value. In the to_form, the source operand is GR
r
2
and only those predicates
specified by the immediate value
mask
17
are written. The value
mask
17
is encoded in the
instruction in an
imm
16
field such that:
imm
16
=
mask
17
>> 1. Predicate register 0 is
always one. The
mask
17
value is sign extended. The most significant bit of
mask
17
,
therefore, is the mask bit for all of the rotating predicates. If there is a deferred
exception for GR
r
2
(the NaT bit is 1), a Register NaT Consumption fault is taken.
In the to_rotate_form, only the 48 rotating predicates can be written. The source
operand is taken from the
imm
44
operand (which is encoded in the instruction in an
imm
28
field, such that:
imm
28
=
imm
44
>> 16
). The low 16-bits correspond to the static
predicates. The immediate is sign extended to set the top 21 predicates. Bit position i in
the source operand is copied to PR i.
This instruction operates as if the predicate rotation base in the Current Frame Marker
(CFM.rrb.pr) were zero.
Operation:
if (PR[
qp
]) {
if (from_form) {
check_target_register(
r
1
);
GR[
r
1
] = 1;
// PR[0] is always 1
for (i = 1; i <= 63; i++) {
GR[
r
1
]{i} = PR[pr_phys_to_virt(i)];
}
GR[
r
1
].nat = 0;
} else if (to_form) {
if (GR[
r
2
].nat)
register_nat_consumption_fault(0);
tmp_src = sign_ext(
mask
17
, 17);
for (i = 1; i <= 63; i++) {
if (tmp_src{i})
PR[pr_phys_to_virt(i)] = GR[
r
2
]{i};
}
} else {
// to_rotate_form
tmp_src = sign_ext(
imm
44
, 44);
for (i = 16; i <= 63; i++) {
PR[pr_phys_to_virt(i)] = tmp_src{i};
}
}
}
Interruptions:
Illegal Operation fault
Register NaT Consumption fault
Содержание Itanium 9150M
Страница 1: ......
Страница 209: ...3 200 Volume 3 Instruction Reference padd Interruptions Illegal Operation fault...
Страница 301: ...3 292 Volume 3 Pseudo Code Functions Intel Itanium Architecture Software Developer s Manual Rev 2 3...
Страница 405: ...3 396 Volume 3 Resource and Dependency Semantics...
Страница 406: ...3 397 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Index...
Страница 407: ...3 398 Intel Itanium Architecture Software Developer s Manual Rev 2 3...
Страница 419: ...INDEX Index 12 Index for Volumes 1 2 3 and 4...
Страница 420: ......