@@ -939,6 +939,11 @@ enum LIR_Code {
939
939
, lir_alloc_object
940
940
, lir_monaddr
941
941
, lir_roundfp
942
+ , lir_sqrt
943
+ , lir_abs
944
+ , lir_neg
945
+ , lir_f2hf
946
+ , lir_hf2f
942
947
, lir_safepoint
943
948
, lir_unwind
944
949
, lir_load_klass
@@ -955,13 +960,6 @@ enum LIR_Code {
955
960
, lir_mul
956
961
, lir_div
957
962
, lir_rem
958
- , lir_sqrt
959
- , lir_abs
960
- , lir_neg
961
- , lir_tan
962
- , lir_f2hf
963
- , lir_hf2f
964
- , lir_log10
965
963
, lir_logic_and
966
964
, lir_logic_or
967
965
, lir_logic_xor
@@ -1357,6 +1355,7 @@ class LIR_Op1: public LIR_Op {
1357
1355
1358
1356
protected:
1359
1357
LIR_Opr _opr; // input operand
1358
+ LIR_Opr _tmp;
1360
1359
BasicType _type; // Operand types
1361
1360
LIR_PatchCode _patch; // only required with patchin (NEEDS_CLEANUP: do we want a special instruction for patching?)
1362
1361
@@ -1371,12 +1370,21 @@ class LIR_Op1: public LIR_Op {
1371
1370
LIR_Op1 (LIR_Code code, LIR_Opr opr, LIR_Opr result = LIR_OprFact::illegalOpr, BasicType type = T_ILLEGAL, LIR_PatchCode patch = lir_patch_none, CodeEmitInfo* info = nullptr )
1372
1371
: LIR_Op(code, result, info)
1373
1372
, _opr(opr)
1373
+ , _tmp(LIR_OprFact::illegalOpr)
1374
+ , _type(type)
1375
+ , _patch(patch) { assert (is_in_range (code, begin_op1, end_op1), " code check" ); }
1376
+
1377
+ LIR_Op1 (LIR_Code code, LIR_Opr opr, LIR_Opr result, LIR_Opr tmp, BasicType type = T_ILLEGAL, LIR_PatchCode patch = lir_patch_none, CodeEmitInfo* info = nullptr )
1378
+ : LIR_Op(code, result, info)
1379
+ , _opr(opr)
1380
+ , _tmp(tmp)
1374
1381
, _type(type)
1375
1382
, _patch(patch) { assert (is_in_range (code, begin_op1, end_op1), " code check" ); }
1376
1383
1377
1384
LIR_Op1 (LIR_Code code, LIR_Opr opr, LIR_Opr result, BasicType type, LIR_PatchCode patch, CodeEmitInfo* info, LIR_MoveKind kind)
1378
1385
: LIR_Op(code, result, info)
1379
1386
, _opr(opr)
1387
+ , _tmp(LIR_OprFact::illegalOpr)
1380
1388
, _type(type)
1381
1389
, _patch(patch) {
1382
1390
assert (code == lir_move, " must be" );
@@ -1386,10 +1394,12 @@ class LIR_Op1: public LIR_Op {
1386
1394
LIR_Op1 (LIR_Code code, LIR_Opr opr, CodeEmitInfo* info)
1387
1395
: LIR_Op(code, LIR_OprFact::illegalOpr, info)
1388
1396
, _opr(opr)
1397
+ , _tmp(LIR_OprFact::illegalOpr)
1389
1398
, _type(T_ILLEGAL)
1390
1399
, _patch(lir_patch_none) { assert (is_in_range (code, begin_op1, end_op1), " code check" ); }
1391
1400
1392
1401
LIR_Opr in_opr () const { return _opr; }
1402
+ LIR_Opr tmp_opr () const { return _tmp; }
1393
1403
LIR_PatchCode patch_code () const { return _patch; }
1394
1404
BasicType type () const { return _type; }
1395
1405
@@ -2272,15 +2282,13 @@ class LIR_List: public CompilationResourceObj {
2272
2282
void cas_int (LIR_Opr addr, LIR_Opr cmp_value, LIR_Opr new_value,
2273
2283
LIR_Opr t1, LIR_Opr t2, LIR_Opr result = LIR_OprFact::illegalOpr);
2274
2284
2275
- void abs (LIR_Opr from, LIR_Opr to, LIR_Opr tmp) { append (new LIR_Op2 (lir_abs , from, tmp, to )); }
2276
- void negate (LIR_Opr from, LIR_Opr to, LIR_Opr tmp = LIR_OprFact::illegalOpr) { append (new LIR_Op2 (lir_neg, from, tmp, to )); }
2277
- void sqrt (LIR_Opr from, LIR_Opr to, LIR_Opr tmp) { append (new LIR_Op2 (lir_sqrt, from, tmp, to )); }
2285
+ void abs (LIR_Opr from, LIR_Opr to, LIR_Opr tmp) { append (new LIR_Op1 (lir_abs , from, to, tmp )); }
2286
+ void negate (LIR_Opr from, LIR_Opr to, LIR_Opr tmp = LIR_OprFact::illegalOpr) { append (new LIR_Op1 (lir_neg, from, to, tmp )); }
2287
+ void sqrt (LIR_Opr from, LIR_Opr to, LIR_Opr tmp) { append (new LIR_Op1 (lir_sqrt, from, to, tmp )); }
2278
2288
void fmad (LIR_Opr from, LIR_Opr from1, LIR_Opr from2, LIR_Opr to) { append (new LIR_Op3 (lir_fmad, from, from1, from2, to)); }
2279
2289
void fmaf (LIR_Opr from, LIR_Opr from1, LIR_Opr from2, LIR_Opr to) { append (new LIR_Op3 (lir_fmaf, from, from1, from2, to)); }
2280
- void log10 (LIR_Opr from, LIR_Opr to, LIR_Opr tmp) { append (new LIR_Op2 (lir_log10, from, LIR_OprFact::illegalOpr, to, tmp)); }
2281
- void tan (LIR_Opr from, LIR_Opr to, LIR_Opr tmp1, LIR_Opr tmp2) { append (new LIR_Op2 (lir_tan , from, tmp1, to, tmp2)); }
2282
- void f2hf (LIR_Opr from, LIR_Opr to, LIR_Opr tmp) { append (new LIR_Op2 (lir_f2hf, from, tmp, to)); }
2283
- void hf2f (LIR_Opr from, LIR_Opr to, LIR_Opr tmp) { append (new LIR_Op2 (lir_hf2f, from, tmp, to)); }
2290
+ void f2hf (LIR_Opr from, LIR_Opr to, LIR_Opr tmp) { append (new LIR_Op1 (lir_f2hf, from, to, tmp)); }
2291
+ void hf2f (LIR_Opr from, LIR_Opr to, LIR_Opr tmp) { append (new LIR_Op1 (lir_hf2f, from, to, tmp)); }
2284
2292
2285
2293
void add (LIR_Opr left, LIR_Opr right, LIR_Opr res) { append (new LIR_Op2 (lir_add, left, right, res)); }
2286
2294
void sub (LIR_Opr left, LIR_Opr right, LIR_Opr res, CodeEmitInfo* info = nullptr ) { append (new LIR_Op2 (lir_sub, left, right, res, info)); }
0 commit comments