src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64MacroAssembler.java
changeset 58877 aec7bf35d6f5
parent 58533 46b0b7fe255c
equal deleted inserted replaced
58876:1a8d65e71a66 58877:aec7bf35d6f5
   815     public void mneg(int size, Register dst, Register src1, Register src2) {
   815     public void mneg(int size, Register dst, Register src1, Register src2) {
   816         super.msub(size, dst, src1, src2, zr);
   816         super.msub(size, dst, src1, src2, zr);
   817     }
   817     }
   818 
   818 
   819     /**
   819     /**
   820      * unsigned multiply high. dst = (src1 * src2) >> size
   820      * Unsigned multiply high. dst = (src1 * src2) >> size
   821      *
   821      *
   822      * @param size register size. Has to be 32 or 64.
   822      * @param size register size. Has to be 32 or 64.
   823      * @param dst general purpose register. May not be null or the stackpointer.
   823      * @param dst general purpose register. May not be null or the stackpointer.
   824      * @param src1 general purpose register. May not be null or the stackpointer.
   824      * @param src1 general purpose register. May not be null or the stackpointer.
   825      * @param src2 general purpose register. May not be null or the stackpointer.
   825      * @param src2 general purpose register. May not be null or the stackpointer.
   836             lshr(64, dst, dst, 32);
   836             lshr(64, dst, dst, 32);
   837         }
   837         }
   838     }
   838     }
   839 
   839 
   840     /**
   840     /**
   841      * signed multiply high. dst = (src1 * src2) >> size
   841      * Signed multiply high. dst = (src1 * src2) >> size
   842      *
   842      *
   843      * @param size register size. Has to be 32 or 64.
   843      * @param size register size. Has to be 32 or 64.
   844      * @param dst general purpose register. May not be null or the stackpointer.
   844      * @param dst general purpose register. May not be null or the stackpointer.
   845      * @param src1 general purpose register. May not be null or the stackpointer.
   845      * @param src1 general purpose register. May not be null or the stackpointer.
   846      * @param src2 general purpose register. May not be null or the stackpointer.
   846      * @param src2 general purpose register. May not be null or the stackpointer.
   854             // xDst = wSrc1 * wSrc2
   854             // xDst = wSrc1 * wSrc2
   855             super.smaddl(dst, src1, src2, zr);
   855             super.smaddl(dst, src1, src2, zr);
   856             // xDst = xDst >> 32
   856             // xDst = xDst >> 32
   857             lshr(64, dst, dst, 32);
   857             lshr(64, dst, dst, 32);
   858         }
   858         }
       
   859     }
       
   860 
       
   861     /**
       
   862      * Signed multiply long. xDst = wSrc1 * wSrc2
       
   863      *
       
   864      * @param size destination register size. Has to be 64.
       
   865      * @param dst 64-bit general purpose register. May not be null or the stackpointer.
       
   866      * @param src1 32-bit general purpose register. May not be null or the stackpointer.
       
   867      * @param src2 32-bit general purpose register. May not be null or the stackpointer.
       
   868      */
       
   869     public void smull(int size, Register dst, Register src1, Register src2) {
       
   870         this.smaddl(size, dst, src1, src2, zr);
       
   871     }
       
   872 
       
   873     /**
       
   874      * Signed multiply-negate long. xDst = -(wSrc1 * wSrc2)
       
   875      *
       
   876      * @param size destination register size. Has to be 64.
       
   877      * @param dst 64-bit general purpose register. May not be null or the stackpointer.
       
   878      * @param src1 32-bit general purpose register. May not be null or the stackpointer.
       
   879      * @param src2 32-bit general purpose register. May not be null or the stackpointer.
       
   880      */
       
   881     public void smnegl(int size, Register dst, Register src1, Register src2) {
       
   882         this.smsubl(size, dst, src1, src2, zr);
       
   883     }
       
   884 
       
   885     /**
       
   886      * Signed multiply-add long. xDst = xSrc3 + (wSrc1 * wSrc2)
       
   887      *
       
   888      * @param size destination register size. Has to be 64.
       
   889      * @param dst 64-bit general purpose register. May not be null or the stackpointer.
       
   890      * @param src1 32-bit general purpose register. May not be null or the stackpointer.
       
   891      * @param src2 32-bit general purpose register. May not be null or the stackpointer.
       
   892      * @param src3 64-bit general purpose register. May not be null or the stackpointer.
       
   893      */
       
   894     public void smaddl(int size, Register dst, Register src1, Register src2, Register src3) {
       
   895         assert (!dst.equals(sp) && !src1.equals(sp) && !src2.equals(sp) && !src3.equals(sp));
       
   896         assert size == 64;
       
   897         super.smaddl(dst, src1, src2, src3);
       
   898     }
       
   899 
       
   900     /**
       
   901      * Signed multiply-sub long. xDst = xSrc3 - (wSrc1 * wSrc2)
       
   902      *
       
   903      * @param size destination register size. Has to be 64.
       
   904      * @param dst 64-bit general purpose register. May not be null or the stackpointer.
       
   905      * @param src1 32-bit general purpose register. May not be null or the stackpointer.
       
   906      * @param src2 32-bit general purpose register. May not be null or the stackpointer.
       
   907      * @param src3 64-bit general purpose register. May not be null or the stackpointer.
       
   908      */
       
   909     public void smsubl(int size, Register dst, Register src1, Register src2, Register src3) {
       
   910         assert (!dst.equals(sp) && !src1.equals(sp) && !src2.equals(sp) && !src3.equals(sp));
       
   911         assert size == 64;
       
   912         super.smsubl(dst, src1, src2, src3);
   859     }
   913     }
   860 
   914 
   861     /**
   915     /**
   862      * dst = src1 % src2. Signed.
   916      * dst = src1 % src2. Signed.
   863      *
   917      *