From 9aa4f223213331fdaedc55b877135ae4b292b4e8 Mon Sep 17 00:00:00 2001 From: Egor Chesakov Date: Thu, 30 Jan 2020 18:04:55 -0800 Subject: [PATCH 1/4] Add execution characteristics for Crc32 instructions in emitarm64.cpp --- src/coreclr/src/jit/emitarm64.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/coreclr/src/jit/emitarm64.cpp b/src/coreclr/src/jit/emitarm64.cpp index e9909b28f089ac..1312798d1e5978 100644 --- a/src/coreclr/src/jit/emitarm64.cpp +++ b/src/coreclr/src/jit/emitarm64.cpp @@ -12378,6 +12378,22 @@ emitter::insExecutionCharacteristics emitter::getInsExecutionCharacteristics(ins result.insLatency = PERFSCORE_LATENCY_1C; break; + case INS_crc32b: + case INS_crc32h: + case INS_crc32cb: + case INS_crc32ch: + case INS_crc32x: + case INS_crc32cx: + result.insThroughput = PERFSCORE_THROUGHPUT_2X; + result.insLatency = PERFSCORE_LATENCY_2C; + break; + + case INS_crc32w: + case INS_crc32cw: + result.insThroughput = PERFSCORE_THROUGHPUT_2X; + result.insLatency = PERFSCORE_LATENCY_1C; + break; + default: // all other instructions perfScoreUnhandledInstruction(id, &result); From 23a8cbffa2ce1c73313e7d7bbacdee2e671570d1 Mon Sep 17 00:00:00 2001 From: Egor Chesakov Date: Thu, 30 Jan 2020 18:05:44 -0800 Subject: [PATCH 2/4] Update execution characteristics for DV_3B instructions in emitarm64.cpp --- src/coreclr/src/jit/emitarm64.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/coreclr/src/jit/emitarm64.cpp b/src/coreclr/src/jit/emitarm64.cpp index 1312798d1e5978..75e2bf9a2062c2 100644 --- a/src/coreclr/src/jit/emitarm64.cpp +++ b/src/coreclr/src/jit/emitarm64.cpp @@ -12779,13 +12779,24 @@ emitter::insExecutionCharacteristics emitter::getInsExecutionCharacteristics(ins result.insLatency = PERFSCORE_LATENCY_4C; break; + case INS_facge: + case INS_facgt: case INS_fcmeq: case INS_fcmge: case INS_fcmgt: case INS_fcmle: case INS_fcmlt: - result.insThroughput = PERFSCORE_THROUGHPUT_2X; - result.insLatency = PERFSCORE_LATENCY_2C; + if (id->idOpSize() == EA_16BYTE) + { + // Q-form + result.insThroughput = PERFSCORE_THROUGHPUT_1C; + result.insLatency = PERFSCORE_LATENCY_2C; + } + else + { + result.insThroughput = PERFSCORE_THROUGHPUT_2X; + result.insLatency = PERFSCORE_LATENCY_2C; + } break; case INS_fdiv: From 852603ae7f62fa4f7485bc8f16ced94d992d8aff Mon Sep 17 00:00:00 2001 From: Egor Chesakov Date: Thu, 30 Jan 2020 18:06:12 -0800 Subject: [PATCH 3/4] Add execution characteristics for DV_3D instructions in emitarm64.cpp --- src/coreclr/src/jit/emitarm64.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/coreclr/src/jit/emitarm64.cpp b/src/coreclr/src/jit/emitarm64.cpp index 75e2bf9a2062c2..4cfb28d1e714e0 100644 --- a/src/coreclr/src/jit/emitarm64.cpp +++ b/src/coreclr/src/jit/emitarm64.cpp @@ -12847,6 +12847,15 @@ emitter::insExecutionCharacteristics emitter::getInsExecutionCharacteristics(ins result.insLatency = PERFSCORE_LATENCY_4C; break; + case INS_facge: + case INS_facgt: + case INS_fcmeq: + case INS_fcmge: + case INS_fcmgt: + result.insThroughput = PERFSCORE_THROUGHPUT_2X; + result.insLatency = PERFSCORE_LATENCY_2C; + break; + case INS_fdiv: if (id->idOpSize() == EA_8BYTE) { From e6c518d02336a4a6e270cb37ee6f7341ec30ab3a Mon Sep 17 00:00:00 2001 From: Egor Chesakov Date: Thu, 30 Jan 2020 18:19:47 -0800 Subject: [PATCH 4/4] Update comment in emitIns_R_R_R in emitarm64.cpp --- src/coreclr/src/jit/emitarm64.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/src/jit/emitarm64.cpp b/src/coreclr/src/jit/emitarm64.cpp index 4cfb28d1e714e0..4f30556f3d3e78 100644 --- a/src/coreclr/src/jit/emitarm64.cpp +++ b/src/coreclr/src/jit/emitarm64.cpp @@ -5268,8 +5268,8 @@ void emitter::emitIns_R_R_R( } else { - assert(insOptsNone(opt)); // Scalar operation + assert(insOptsNone(opt)); assert(size == EA_8BYTE); // Only Int64/UInt64 supported fmt = IF_DV_3E; }