case DSGA_OP_SHL: return (U)last_value << ((U)value & 0x1F); // mask 'value' to 5 bits, which should behave the same on all architectures.
case DSGA_OP_SHR: return (U)last_value >> ((U)value & 0x1F);
case DSGA_OP_SAR: return (S)last_value >> ((U)value & 0x1F);
case DSGA_OP_SHL: return (uint32)(U)last_value << ((U)value & 0x1F); // Same behaviour as in ParamSet, mask 'value' to 5 bits, which should behave the same on all architectures.
case DSGA_OP_SHR: return (uint32)(U)last_value >> ((U)value & 0x1F);
case DSGA_OP_SAR: return (int32)(S)last_value >> ((U)value & 0x1F);