addExact intrinsic
    Andrew Haley 
    aph at redhat.com
       
    Tue Dec 10 03:46:47 PST 2013
    
    
  
I've been looking at addExact for AArch64, and I think I've got it
right, but it looks rather odd.
As far as I can see the output of addExact is fixed to a named
register and to the FlagsReg.  Matcher uses these functions to match
the output of addExact:
const RegMask Matcher::mathExactI_result_proj_mask() {
  return R0_REG_mask();
}
const RegMask Matcher::mathExactI_flags_proj_mask() {
  return INT_FLAGS_mask();
}
And these are the instruction patterns:
instruct addExactI_reg(iRegIorL2I src1, iRegIorL2I src2, rFlagsReg cr)
%{
  match(AddExactI src1 src2);
  effect(DEF cr);
  format %{ "addsw    r0, $src1, $src2\t# addExact int" %}
  ins_encode %{
    __ addsw(r0,
            as_Register($src1$$reg),
            as_Register($src2$$reg));
  %}
  ins_pipe(pipe_class_default);
%}
instruct addExactI_reg_imm(iRegIorL2I src1, immI src2, rFlagsReg cr)
%{
  match(AddExactI src1 src2);
  effect(DEF cr);
  format %{ "addsw    r0, $src1, $src2\t# addExact int" %}
  ins_encode %{
    __ addsw(r0,
            as_Register($src1$$reg),
            as_Register($src2$$constant));
  %}
  ins_pipe(pipe_class_default);
%}
Is that reasonable?
Thanks,
Andrew.
    
    
More information about the hotspot-dev
mailing list