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

if (one_byte_form) { // one-byte elements
x[0] = GR[r2]{7:0}; y[0] = GR[r3]{7:0};
x[1] = GR[r2]{15:8}; y[1] = GR[r3]{15:8};
x[2] = GR[r2]{23:16}; y[2] = GR[r3]{23:16};
x[3] = GR[r2]{31:24}; y[3] = GR[r3]{31:24};
x[4] = GR[r2]{39:32}; y[4] = GR[r3]{39:32};
x[5] = GR[r2]{47:40}; y[5] = GR[r3]{47:40};
x[6] = GR[r2]{55:48}; y[6] = GR[r3]{55:48};
x[7] = GR[r2]{63:56}; y[7] = GR[r3]{63:56};

if (sss_saturation_form) { // sss_saturation_form
max = sign_ext(0x7f, 8);
min = sign_ext(0x80, 8);
for (i = 0; i < 8; i++) {
temp[i] = sign_ext(x[i], 8) - sign_ext(y[i], 8);
}
} else if (uus_saturation_form) { // uus_saturation_form
max = 0xff;
min = 0x00;
for (i = 0; i < 8; i++) {
temp[i] = zero_ext(x[i], 8) - sign_ext(y[i], 8);
}
} else if (uuu_saturation_form) { // uuu_saturation_form
max = 0xff;
min = 0x00;
for (i = 0; i < 8; i++) {
temp[i] = zero_ext(x[i], 8) - zero_ext(y[i], 8);
}
} else { // modulo_form
for (i = 0; i < 8; i++) {
temp[i] = zero_ext(x[i], 8) - zero_ext(y[i], 8);
}
}

if (sss_saturation_form || uus_saturation_form || uuu_saturation_form) {
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 if (two_byte_form) { // two-byte elements
x[0] = GR[r2]{15:0}; y[0] = GR[r3]{15:0};
x[1] = GR[r2]{31:16}; y[1] = GR[r3]{31:16};
x[2] = GR[r2]{47:32}; y[2] = GR[r3]{47:32};
x[3] = GR[r2]{63:48}; y[3] = GR[r3]{63:48};

if (sss_saturation_form) { // sss_saturation_form
max = sign_ext(0x7fff, 16);
min = sign_ext(0x8000, 16);
for (i = 0; i < 4; i++) {
temp[i] = sign_ext(x[i], 16) - sign_ext(y[i], 16);
}
} else if (uus_saturation_form) { // uus_saturation_form
max = 0xffff;
min = 0x0000;
for (i = 0; i < 4; i++) {
temp[i] = zero_ext(x[i], 16) - sign_ext(y[i], 16);
}
} else if (uuu_saturation_form) { // uuu_saturation_form
max = 0xffff;
min = 0x0000;
for (i = 0; i < 4; i++) {
temp[i] = zero_ext(x[i], 16) - zero_ext(y[i], 16);
}
} else { // modulo_form
for (i = 0; i < 4; i++) {
temp[i] = zero_ext(x[i], 16) - zero_ext(y[i], 16);
}
}

if (sss_saturation_form || uus_saturation_form || uuu_saturation_form) {
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]);
} else { // four-byte elements
x[0] = GR[r2]{31:0}; y[0] = GR[r3]{31:0};
x[1] = GR[r2]{63:32}; y[1] = GR[r3]{63:32};

for (i = 0; i < 2; i++) { // modulo_form
temp[i] = zero_ext(x[i], 32) - zero_ext(y[i], 32);
}

GR[r1] = concatenate2(temp[1], temp[0]);
}

GR
[r1].nat = GR[r2].nat || GR[r3].nat;
}