Volume 3: Instruction Reference
3:175
mov cr
mov — Move Control Register
Format:
(
qp
) mov
r
1
=
cr
3
from_form
(
qp
) mov
cr
3
=
r
2
to_form
Description:
The source operand is copied to the destination register.
For the from_form, the control register specified by
cr
3
is read and the value copied into
GR
r
1
.
For the to_form, GR
r
2
is read and the value copied into CR
cr
3
.
Control registers can only be accessed at the most privileged level, and when PSR.vm is
0. Reading or writing an interruption control register (CR16-CR27), when the PSR.ic bit
is one, will result in an Illegal Operation fault.
Operation:
if (PR[
qp
]) {
if (is_reserved_reg(CR_TYPE,
cr
3
)
|| to_form && is_read_only_reg(CR_TYPE,
cr
3
)
|| PSR.ic && is_interruption_cr(
cr
3
))
{
illegal_operation_fault();
}
if (from_form)
check_target_register(
r
1
);
if (PSR.cpl != 0)
privileged_operation_fault(0);
if (from_form) {
if (PSR.vm == 1)
virtualization_fault();
if (
cr
3
== IVR)
check_interrupt_request();
if (
cr
3
== ITIR)
GR[
r
1
] = impl_itir_cwi_mask(CR[ITIR]);
else
GR[
r
1
] = CR[
cr
3
];
GR[
r
1
].nat = 0;
} else {
// to_form
if (GR[
r
2
].nat)
register_nat_consumption_fault(0);
if (is_reserved_field(CR_TYPE,
cr
3
, GR[
r
2
]))
reserved_register_field_fault();
if ((
cr
3
== IFA) && impl_check_mov_ifa() &&
unimplemented_virtual_address(GR[
r
2
], PSR.vm))
unimplemented_data_address_fault(0);
if (PSR.vm == 1)
virtualization_fault();
if (
cr
3
== EOI)
end_of_interrupt();
tmp_val = ignored_field_mask(CR_TYPE,
cr
3
, GR[
r
2
]);
CR[
cr
3
] = tmp_val;
if (
cr
3
== IIPA)
Summary of Contents for Itanium 9150M
Page 1: ......
Page 209: ...3 200 Volume 3 Instruction Reference padd Interruptions Illegal Operation fault...
Page 405: ...3 396 Volume 3 Resource and Dependency Semantics...
Page 406: ...3 397 Intel Itanium Architecture Software Developer s Manual Rev 2 3 Index...
Page 407: ...3 398 Intel Itanium Architecture Software Developer s Manual Rev 2 3...
Page 419: ...INDEX Index 12 Index for Volumes 1 2 3 and 4...
Page 420: ......