@@ -11356,7 +11356,7 @@ instruct modI(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
11356
11356
11357
11357
ins_cost(INSN_COST * 22);
11358
11358
format %{ "sdivw rscratch1, $src1, $src2\n\t"
11359
- "msubw( $dst, rscratch1, $src2, $src1" %}
11359
+ "msubw $dst, rscratch1, $src2, $src1" %}
11360
11360
11361
11361
ins_encode(aarch64_enc_modw(dst, src1, src2));
11362
11362
ins_pipe(idiv_reg_reg);
@@ -11369,12 +11369,76 @@ instruct modL(iRegLNoSp dst, iRegL src1, iRegL src2) %{
11369
11369
11370
11370
ins_cost(INSN_COST * 38);
11371
11371
format %{ "sdiv rscratch1, $src1, $src2\n"
11372
- "msub( $dst, rscratch1, $src2, $src1" %}
11372
+ "msub $dst, rscratch1, $src2, $src1" %}
11373
11373
11374
11374
ins_encode(aarch64_enc_mod(dst, src1, src2));
11375
11375
ins_pipe(ldiv_reg_reg);
11376
11376
%}
11377
11377
11378
+ // Unsigned Integer Divide
11379
+
11380
+ instruct UdivI_reg_reg(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
11381
+ match(Set dst (UDivI src1 src2));
11382
+
11383
+ ins_cost(INSN_COST * 19);
11384
+ format %{ "udivw $dst, $src1, $src2" %}
11385
+
11386
+ ins_encode %{
11387
+ __ udivw($dst$$Register, $src1$$Register, $src2$$Register);
11388
+ %}
11389
+
11390
+ ins_pipe(idiv_reg_reg);
11391
+ %}
11392
+
11393
+ // Unsigned Long Divide
11394
+
11395
+ instruct UdivL_reg_reg(iRegLNoSp dst, iRegL src1, iRegL src2) %{
11396
+ match(Set dst (UDivL src1 src2));
11397
+
11398
+ ins_cost(INSN_COST * 35);
11399
+ format %{ "udiv $dst, $src1, $src2" %}
11400
+
11401
+ ins_encode %{
11402
+ __ udiv($dst$$Register, $src1$$Register, $src2$$Register);
11403
+ %}
11404
+
11405
+ ins_pipe(ldiv_reg_reg);
11406
+ %}
11407
+
11408
+ // Unsigned Integer Remainder
11409
+
11410
+ instruct UmodI_reg_reg(iRegINoSp dst, iRegIorL2I src1, iRegIorL2I src2) %{
11411
+ match(Set dst (UModI src1 src2));
11412
+
11413
+ ins_cost(INSN_COST * 22);
11414
+ format %{ "udivw rscratch1, $src1, $src2\n\t"
11415
+ "msubw $dst, rscratch1, $src2, $src1" %}
11416
+
11417
+ ins_encode %{
11418
+ __ udivw(rscratch1, $src1$$Register, $src2$$Register);
11419
+ __ msubw($dst$$Register, rscratch1, $src2$$Register, $src1$$Register);
11420
+ %}
11421
+
11422
+ ins_pipe(idiv_reg_reg);
11423
+ %}
11424
+
11425
+ // Unsigned Long Remainder
11426
+
11427
+ instruct UModL_reg_reg(iRegLNoSp dst, iRegL src1, iRegL src2) %{
11428
+ match(Set dst (UModL src1 src2));
11429
+
11430
+ ins_cost(INSN_COST * 38);
11431
+ format %{ "udiv rscratch1, $src1, $src2\n"
11432
+ "msub $dst, rscratch1, $src2, $src1" %}
11433
+
11434
+ ins_encode %{
11435
+ __ udiv(rscratch1, $src1$$Register, $src2$$Register);
11436
+ __ msub($dst$$Register, rscratch1, $src2$$Register, $src1$$Register);
11437
+ %}
11438
+
11439
+ ins_pipe(ldiv_reg_reg);
11440
+ %}
11441
+
11378
11442
// Integer Shifts
11379
11443
11380
11444
// Shift Left Register
0 commit comments