pack Operation Font Conventions
if (PR[qp]) {
check_target_register
;

if (two_byte_form) {
if (signed_saturation_form) {
max = sign_ext(0x7f, 8);
min = sign_ext(0x80, 8);
} else { // unsigned_saturation_form
max = 0xff;
min = 0x00;
}
temp[0] = sign_ext(GR[r2]{15:0},  16);
temp[1] = sign_ext(GR[r2]{31:16}, 16);
temp[2] = sign_ext(GR[r2]{47:32}, 16);
temp[3] = sign_ext(GR[r2]{63:48}, 16);
temp[4] = sign_ext(GR[r3]{15:0},  16);
temp[5] = sign_ext(GR[r3]{31:16}, 16);
temp[6] = sign_ext(GR[r3]{47:32}, 16);
temp[7] = sign_ext(GR[r3]{63:48}, 16);

for (i = 0; i < 8; i++) {
if (temp[i] > max)
temp[i] = max;

if (temp[i] < min)
temp[i] = min;
}

GR[r1] = concatenate8(temp[7], temp[6], temp[5], temp[4],
temp[3], temp[2], temp[1], temp[0]);

} else { // four_byte_form
max = sign_ext(0x7fff, 16); // signed_saturation_form
min = sign_ext(0x8000, 16);
temp[0] = sign_ext(GR[r2]{31:0},  32);
temp[1] = sign_ext(GR[r2]{63:32}, 32);
temp[2] = sign_ext(GR[r3]{31:0},  32);
temp[3] = sign_ext(GR[r3]{63:32}, 32);

for (i = 0; i < 4; i++) {
if (temp[i] > max)
temp[i] = max;

if (temp[i] < min)
temp[i] = min;
}

GR[r1] = concatenate4(temp[3], temp[2], temp[1], temp[0]);
}
GR[r1].nat = GR[r2].nat || GR[r3].nat;
}