149a7f3aaSChristoph Müllner# 249a7f3aaSChristoph Müllner# Translation routines for the instructions of the XThead* ISA extensions 349a7f3aaSChristoph Müllner# 449a7f3aaSChristoph Müllner# Copyright (c) 2022 Christoph Muellner, christoph.muellner@vrull.eu 5c9410a68SChristoph Müllner# Dr. Philipp Tomsich, philipp.tomsich@vrull.eu 649a7f3aaSChristoph Müllner# 749a7f3aaSChristoph Müllner# SPDX-License-Identifier: LGPL-2.1-or-later 849a7f3aaSChristoph Müllner# 949a7f3aaSChristoph Müllner# The documentation of the ISA extensions can be found here: 1049a7f3aaSChristoph Müllner# https://github.com/T-head-Semi/thead-extension-spec/releases/latest 1149a7f3aaSChristoph Müllner 1249a7f3aaSChristoph Müllner# Fields: 13c9410a68SChristoph Müllner%rd 7:5 14af99aa72SChristoph Müllner%rd1 7:5 15af99aa72SChristoph Müllner%rs 15:5 1649a7f3aaSChristoph Müllner%rs1 15:5 17af99aa72SChristoph Müllner%rd2 20:5 18134c3ffaSChristoph Müllner%rs2 20:5 19426c0491SChristoph Müllner%sh5 20:5 2045f9df86SChristoph Müllner%imm5 20:s5 21426c0491SChristoph Müllner%sh6 20:6 22af99aa72SChristoph Müllner%sh2 25:2 2345f9df86SChristoph Müllner%imm2 25:2 2449a7f3aaSChristoph Müllner 25c9410a68SChristoph Müllner# Argument sets 26c9410a68SChristoph Müllner&r rd rs1 rs2 !extern 27426c0491SChristoph Müllner&r2 rd rs1 !extern 28426c0491SChristoph Müllner&shift shamt rs1 rd !extern 29426c0491SChristoph Müllner&th_bfext msb lsb rs1 rd 30af99aa72SChristoph Müllner&th_pair rd1 rs rd2 sh2 3145f9df86SChristoph Müllner&th_memidx rd rs1 rs2 imm2 3245f9df86SChristoph Müllner&th_meminc rd rs1 imm5 imm2 33c9410a68SChristoph Müllner 3449a7f3aaSChristoph Müllner# Formats 3549a7f3aaSChristoph Müllner@sfence_vm ....... ..... ..... ... ..... ....... %rs1 36134c3ffaSChristoph Müllner@rs2_s ....... ..... ..... ... ..... ....... %rs2 %rs1 37c9410a68SChristoph Müllner@r ....... ..... ..... ... ..... ....... &r %rs2 %rs1 %rd 38426c0491SChristoph Müllner@r2 ....... ..... ..... ... ..... ....... &r2 %rs1 %rd 39426c0491SChristoph Müllner@th_bfext msb:6 lsb:6 ..... ... ..... ....... &th_bfext %rs1 %rd 40426c0491SChristoph Müllner@sh5 ....... ..... ..... ... ..... ....... &shift shamt=%sh5 %rs1 %rd 41426c0491SChristoph Müllner@sh6 ...... ...... ..... ... ..... ....... &shift shamt=%sh6 %rs1 %rd 42af99aa72SChristoph Müllner@th_pair ..... .. ..... ..... ... ..... ....... &th_pair %rd1 %rs %rd2 %sh2 4345f9df86SChristoph Müllner@th_memidx ..... .. ..... ..... ... ..... ....... &th_memidx %rd %rs1 %rs2 %imm2 4445f9df86SChristoph Müllner@th_meminc ..... .. ..... ..... ... ..... ....... &th_meminc %rd %rs1 %imm5 %imm2 45c9410a68SChristoph Müllner 46c9410a68SChristoph Müllner# XTheadBa 47c9410a68SChristoph Müllner# Instead of defining a new encoding, we simply use the decoder to 48c9410a68SChristoph Müllner# extract the imm[0:1] field and dispatch to separate translation 49c9410a68SChristoph Müllner# functions (mirroring the `sh[123]add` instructions from Zba and 50c9410a68SChristoph Müllner# the regular RVI `add` instruction. 51c9410a68SChristoph Müllner# 52c9410a68SChristoph Müllner# The only difference between sh[123]add and addsl is that the shift 53c9410a68SChristoph Müllner# is applied to rs1 (for addsl) instead of rs2 (for sh[123]add). 54c9410a68SChristoph Müllner# 55c9410a68SChristoph Müllner# Note that shift-by-0 is a valid operation according to the manual. 56c9410a68SChristoph Müllner# This will be equivalent to a regular add. 57c9410a68SChristoph Müllneradd 0000000 ..... ..... 001 ..... 0001011 @r 58c9410a68SChristoph Müllnerth_addsl1 0000001 ..... ..... 001 ..... 0001011 @r 59c9410a68SChristoph Müllnerth_addsl2 0000010 ..... ..... 001 ..... 0001011 @r 60c9410a68SChristoph Müllnerth_addsl3 0000011 ..... ..... 001 ..... 0001011 @r 6149a7f3aaSChristoph Müllner 62426c0491SChristoph Müllner# XTheadBb 63426c0491SChristoph Müllnerth_ext ...... ...... ..... 010 ..... 0001011 @th_bfext 64426c0491SChristoph Müllnerth_extu ...... ...... ..... 011 ..... 0001011 @th_bfext 65426c0491SChristoph Müllnerth_ff0 1000010 00000 ..... 001 ..... 0001011 @r2 66426c0491SChristoph Müllnerth_ff1 1000011 00000 ..... 001 ..... 0001011 @r2 67426c0491SChristoph Müllnerth_srri 000100 ...... ..... 001 ..... 0001011 @sh6 68426c0491SChristoph Müllnerth_srriw 0001010 ..... ..... 001 ..... 0001011 @sh5 69426c0491SChristoph Müllnerth_rev 1000001 00000 ..... 001 ..... 0001011 @r2 70426c0491SChristoph Müllnerth_revw 1001000 00000 ..... 001 ..... 0001011 @r2 71426c0491SChristoph Müllnerth_tstnbz 1000000 00000 ..... 001 ..... 0001011 @r2 72426c0491SChristoph Müllner 73fa134585SChristoph Müllner# XTheadBs 74fa134585SChristoph Müllnerth_tst 100010 ...... ..... 001 ..... 0001011 @sh6 75fa134585SChristoph Müllner 7649a7f3aaSChristoph Müllner# XTheadCmo 7749a7f3aaSChristoph Müllnerth_dcache_call 0000000 00001 00000 000 00000 0001011 7849a7f3aaSChristoph Müllnerth_dcache_ciall 0000000 00011 00000 000 00000 0001011 7949a7f3aaSChristoph Müllnerth_dcache_iall 0000000 00010 00000 000 00000 0001011 8049a7f3aaSChristoph Müllnerth_dcache_cpa 0000001 01001 ..... 000 00000 0001011 @sfence_vm 8149a7f3aaSChristoph Müllnerth_dcache_cipa 0000001 01011 ..... 000 00000 0001011 @sfence_vm 8249a7f3aaSChristoph Müllnerth_dcache_ipa 0000001 01010 ..... 000 00000 0001011 @sfence_vm 8349a7f3aaSChristoph Müllnerth_dcache_cva 0000001 00101 ..... 000 00000 0001011 @sfence_vm 8449a7f3aaSChristoph Müllnerth_dcache_civa 0000001 00111 ..... 000 00000 0001011 @sfence_vm 8549a7f3aaSChristoph Müllnerth_dcache_iva 0000001 00110 ..... 000 00000 0001011 @sfence_vm 8649a7f3aaSChristoph Müllnerth_dcache_csw 0000001 00001 ..... 000 00000 0001011 @sfence_vm 8749a7f3aaSChristoph Müllnerth_dcache_cisw 0000001 00011 ..... 000 00000 0001011 @sfence_vm 8849a7f3aaSChristoph Müllnerth_dcache_isw 0000001 00010 ..... 000 00000 0001011 @sfence_vm 8949a7f3aaSChristoph Müllnerth_dcache_cpal1 0000001 01000 ..... 000 00000 0001011 @sfence_vm 9049a7f3aaSChristoph Müllnerth_dcache_cval1 0000001 00100 ..... 000 00000 0001011 @sfence_vm 9149a7f3aaSChristoph Müllnerth_icache_iall 0000000 10000 00000 000 00000 0001011 9249a7f3aaSChristoph Müllnerth_icache_ialls 0000000 10001 00000 000 00000 0001011 9349a7f3aaSChristoph Müllnerth_icache_ipa 0000001 11000 ..... 000 00000 0001011 @sfence_vm 9449a7f3aaSChristoph Müllnerth_icache_iva 0000001 10000 ..... 000 00000 0001011 @sfence_vm 9549a7f3aaSChristoph Müllnerth_l2cache_call 0000000 10101 00000 000 00000 0001011 9649a7f3aaSChristoph Müllnerth_l2cache_ciall 0000000 10111 00000 000 00000 0001011 9749a7f3aaSChristoph Müllnerth_l2cache_iall 0000000 10110 00000 000 00000 0001011 98134c3ffaSChristoph Müllner 9932909338SChristoph Müllner# XTheadCondMov 10032909338SChristoph Müllnerth_mveqz 0100000 ..... ..... 001 ..... 0001011 @r 10132909338SChristoph Müllnerth_mvnez 0100001 ..... ..... 001 ..... 0001011 @r 10232909338SChristoph Müllner 103d4d90115SChristoph Müllner# XTheadFMemIdx 104d4d90115SChristoph Müllnerth_flrd 01100 .. ..... ..... 110 ..... 0001011 @th_memidx 105d4d90115SChristoph Müllnerth_flrw 01000 .. ..... ..... 110 ..... 0001011 @th_memidx 106d4d90115SChristoph Müllnerth_flurd 01110 .. ..... ..... 110 ..... 0001011 @th_memidx 107d4d90115SChristoph Müllnerth_flurw 01010 .. ..... ..... 110 ..... 0001011 @th_memidx 108d4d90115SChristoph Müllnerth_fsrd 01100 .. ..... ..... 111 ..... 0001011 @th_memidx 109d4d90115SChristoph Müllnerth_fsrw 01000 .. ..... ..... 111 ..... 0001011 @th_memidx 110d4d90115SChristoph Müllnerth_fsurd 01110 .. ..... ..... 111 ..... 0001011 @th_memidx 111d4d90115SChristoph Müllnerth_fsurw 01010 .. ..... ..... 111 ..... 0001011 @th_memidx 112d4d90115SChristoph Müllner 113*578086baSChristoph Müllner# XTheadFmv 114*578086baSChristoph Müllnerth_fmv_hw_x 1010000 00000 ..... 001 ..... 0001011 @r2 115*578086baSChristoph Müllnerth_fmv_x_hw 1100000 00000 ..... 001 ..... 0001011 @r2 116*578086baSChristoph Müllner 117b8a5832bSChristoph Müllner# XTheadMac 118b8a5832bSChristoph Müllnerth_mula 00100 00 ..... ..... 001 ..... 0001011 @r 119b8a5832bSChristoph Müllnerth_mulah 00101 00 ..... ..... 001 ..... 0001011 @r 120b8a5832bSChristoph Müllnerth_mulaw 00100 10 ..... ..... 001 ..... 0001011 @r 121b8a5832bSChristoph Müllnerth_muls 00100 01 ..... ..... 001 ..... 0001011 @r 122b8a5832bSChristoph Müllnerth_mulsh 00101 01 ..... ..... 001 ..... 0001011 @r 123b8a5832bSChristoph Müllnerth_mulsw 00100 11 ..... ..... 001 ..... 0001011 @r 124b8a5832bSChristoph Müllner 12545f9df86SChristoph Müllner# XTheadMemIdx 12645f9df86SChristoph Müllnerth_ldia 01111 .. ..... ..... 100 ..... 0001011 @th_meminc 12745f9df86SChristoph Müllnerth_ldib 01101 .. ..... ..... 100 ..... 0001011 @th_meminc 12845f9df86SChristoph Müllnerth_lwia 01011 .. ..... ..... 100 ..... 0001011 @th_meminc 12945f9df86SChristoph Müllnerth_lwib 01001 .. ..... ..... 100 ..... 0001011 @th_meminc 13045f9df86SChristoph Müllnerth_lwuia 11011 .. ..... ..... 100 ..... 0001011 @th_meminc 13145f9df86SChristoph Müllnerth_lwuib 11001 .. ..... ..... 100 ..... 0001011 @th_meminc 13245f9df86SChristoph Müllnerth_lhia 00111 .. ..... ..... 100 ..... 0001011 @th_meminc 13345f9df86SChristoph Müllnerth_lhib 00101 .. ..... ..... 100 ..... 0001011 @th_meminc 13445f9df86SChristoph Müllnerth_lhuia 10111 .. ..... ..... 100 ..... 0001011 @th_meminc 13545f9df86SChristoph Müllnerth_lhuib 10101 .. ..... ..... 100 ..... 0001011 @th_meminc 13645f9df86SChristoph Müllnerth_lbia 00011 .. ..... ..... 100 ..... 0001011 @th_meminc 13745f9df86SChristoph Müllnerth_lbib 00001 .. ..... ..... 100 ..... 0001011 @th_meminc 13845f9df86SChristoph Müllnerth_lbuia 10011 .. ..... ..... 100 ..... 0001011 @th_meminc 13945f9df86SChristoph Müllnerth_lbuib 10001 .. ..... ..... 100 ..... 0001011 @th_meminc 14045f9df86SChristoph Müllnerth_sdia 01111 .. ..... ..... 101 ..... 0001011 @th_meminc 14145f9df86SChristoph Müllnerth_sdib 01101 .. ..... ..... 101 ..... 0001011 @th_meminc 14245f9df86SChristoph Müllnerth_swia 01011 .. ..... ..... 101 ..... 0001011 @th_meminc 14345f9df86SChristoph Müllnerth_swib 01001 .. ..... ..... 101 ..... 0001011 @th_meminc 14445f9df86SChristoph Müllnerth_shia 00111 .. ..... ..... 101 ..... 0001011 @th_meminc 14545f9df86SChristoph Müllnerth_shib 00101 .. ..... ..... 101 ..... 0001011 @th_meminc 14645f9df86SChristoph Müllnerth_sbia 00011 .. ..... ..... 101 ..... 0001011 @th_meminc 14745f9df86SChristoph Müllnerth_sbib 00001 .. ..... ..... 101 ..... 0001011 @th_meminc 14845f9df86SChristoph Müllner 14945f9df86SChristoph Müllnerth_lrd 01100 .. ..... ..... 100 ..... 0001011 @th_memidx 15045f9df86SChristoph Müllnerth_lrw 01000 .. ..... ..... 100 ..... 0001011 @th_memidx 15145f9df86SChristoph Müllnerth_lrwu 11000 .. ..... ..... 100 ..... 0001011 @th_memidx 15245f9df86SChristoph Müllnerth_lrh 00100 .. ..... ..... 100 ..... 0001011 @th_memidx 15345f9df86SChristoph Müllnerth_lrhu 10100 .. ..... ..... 100 ..... 0001011 @th_memidx 15445f9df86SChristoph Müllnerth_lrb 00000 .. ..... ..... 100 ..... 0001011 @th_memidx 15545f9df86SChristoph Müllnerth_lrbu 10000 .. ..... ..... 100 ..... 0001011 @th_memidx 15645f9df86SChristoph Müllnerth_srd 01100 .. ..... ..... 101 ..... 0001011 @th_memidx 15745f9df86SChristoph Müllnerth_srw 01000 .. ..... ..... 101 ..... 0001011 @th_memidx 15845f9df86SChristoph Müllnerth_srh 00100 .. ..... ..... 101 ..... 0001011 @th_memidx 15945f9df86SChristoph Müllnerth_srb 00000 .. ..... ..... 101 ..... 0001011 @th_memidx 16045f9df86SChristoph Müllner 16145f9df86SChristoph Müllnerth_lurd 01110 .. ..... ..... 100 ..... 0001011 @th_memidx 16245f9df86SChristoph Müllnerth_lurw 01010 .. ..... ..... 100 ..... 0001011 @th_memidx 16345f9df86SChristoph Müllnerth_lurwu 11010 .. ..... ..... 100 ..... 0001011 @th_memidx 16445f9df86SChristoph Müllnerth_lurh 00110 .. ..... ..... 100 ..... 0001011 @th_memidx 16545f9df86SChristoph Müllnerth_lurhu 10110 .. ..... ..... 100 ..... 0001011 @th_memidx 16645f9df86SChristoph Müllnerth_lurb 00010 .. ..... ..... 100 ..... 0001011 @th_memidx 16745f9df86SChristoph Müllnerth_lurbu 10010 .. ..... ..... 100 ..... 0001011 @th_memidx 16845f9df86SChristoph Müllnerth_surd 01110 .. ..... ..... 101 ..... 0001011 @th_memidx 16945f9df86SChristoph Müllnerth_surw 01010 .. ..... ..... 101 ..... 0001011 @th_memidx 17045f9df86SChristoph Müllnerth_surh 00110 .. ..... ..... 101 ..... 0001011 @th_memidx 17145f9df86SChristoph Müllnerth_surb 00010 .. ..... ..... 101 ..... 0001011 @th_memidx 17245f9df86SChristoph Müllner 173af99aa72SChristoph Müllner# XTheadMemPair 174af99aa72SChristoph Müllnerth_ldd 11111 .. ..... ..... 100 ..... 0001011 @th_pair 175af99aa72SChristoph Müllnerth_lwd 11100 .. ..... ..... 100 ..... 0001011 @th_pair 176af99aa72SChristoph Müllnerth_lwud 11110 .. ..... ..... 100 ..... 0001011 @th_pair 177af99aa72SChristoph Müllnerth_sdd 11111 .. ..... ..... 101 ..... 0001011 @th_pair 178af99aa72SChristoph Müllnerth_swd 11100 .. ..... ..... 101 ..... 0001011 @th_pair 179af99aa72SChristoph Müllner 180134c3ffaSChristoph Müllner# XTheadSync 181134c3ffaSChristoph Müllnerth_sfence_vmas 0000010 ..... ..... 000 00000 0001011 @rs2_s 182134c3ffaSChristoph Müllnerth_sync 0000000 11000 00000 000 00000 0001011 183134c3ffaSChristoph Müllnerth_sync_i 0000000 11010 00000 000 00000 0001011 184134c3ffaSChristoph Müllnerth_sync_is 0000000 11011 00000 000 00000 0001011 185134c3ffaSChristoph Müllnerth_sync_s 0000000 11001 00000 000 00000 0001011 186