b6c08970bc
-----BEGIN PGP SIGNATURE----- iQJTBAABCgA9FiEEbmNqfoPy3Qz6bm43CtLGOWtpyhQFAlh2NbsfHGtiYXN0aWFu QG1haWwudW5pLXBhZGVyYm9ybi5kZQAKCRAK0sY5a2nKFLuOEAC5twyd1sXr1lGZ NNY/QwxBteNiEFhzl4FtvOCiIUF5V/FEo7h1Bz1AHsGqaUWMKFdTtFO1dT8VWyl+ wQb0hnOtOiUxEl/UU35cviGzxr5iNWWUx/+yQezUrx7z8HBXUHpWgMbRvJSQ7ZpK Jjp/7zwbwtWjALTUPNOZZPWi7yYGSOXPIBHfSvsRx1KKC4o6hpQndm9uXOHUojf4 DPrGXWayieRQCmJOSeEOosVjU/e4bNOIdQU2/P3fV9MRPzqapG0U7NsVZfcqxiUY loEUKOe7jhNrVnwSqStCpdQlA2W1h0PoaXLc3kEw7D92S+rHk6pCDsHlq19bJvIV /KrymUmbbw5D5W/GNEtyXY6Q+x7hK+zQ2pvoPfG/NVXHBdEp1lT/qrKJQQJqfmLi j2qozmty1aBrYMYL34caeXoFILJVUxwiZ51DKN3Y/MOArPV/ehPUujKfIRksCRJd nu+kUur9aRR4tmb8XwjEVj2ewtJhOE6SUdxRUT/C+kAGUAzRqQcPgTMhcj8UvITl lyrMB69zh3s3U1FthGefLuy+7XSy/tg+slqeFmHpt6tlU6+eD//jk/m+ryC236jq fqUIXYrKZM9hG4/q6OsdM5HN2uVPKGtZTJUxkGl6uLeRZHrjLoeMQJ5VM624/mJx 6guBOiHSf4t+IgHuOumjTeIz5QaGuw== =80tR -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bkoppelmann/tags/pull-tricore-2017-01-11-2' into staging TriCore FPU patches # gpg: Signature made Wed 11 Jan 2017 13:40:11 GMT # gpg: using RSA key 0x0AD2C6396B69CA14 # gpg: Good signature from "Bastian Koppelmann <kbastian@mail.uni-paderborn.de>" # Primary key fingerprint: 6E63 6A7E 83F2 DD0C FA6E 6E37 0AD2 C639 6B69 CA14 * remotes/bkoppelmann/tags/pull-tricore-2017-01-11-2: target-tricore: Add updfl instruction target-tricore: Added new JNE instruction variant target-tricore: Added new MOV instruction variant target-tricore: Added MADD.F and MSUB.F instructions target-tricore: Added FTOUZ instruction Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
153 lines
6.8 KiB
C
153 lines
6.8 KiB
C
/*
|
|
* Copyright (c) 2012-2014 Bastian Koppelmann C-Lab/University Paderborn
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/* Arithmetic */
|
|
DEF_HELPER_3(add_ssov, i32, env, i32, i32)
|
|
DEF_HELPER_3(add64_ssov, i64, env, i64, i64)
|
|
DEF_HELPER_3(add_suov, i32, env, i32, i32)
|
|
DEF_HELPER_3(add_h_ssov, i32, env, i32, i32)
|
|
DEF_HELPER_3(add_h_suov, i32, env, i32, i32)
|
|
DEF_HELPER_4(addr_h_ssov, i32, env, i64, i32, i32)
|
|
DEF_HELPER_4(addsur_h_ssov, i32, env, i64, i32, i32)
|
|
DEF_HELPER_3(sub_ssov, i32, env, i32, i32)
|
|
DEF_HELPER_3(sub64_ssov, i64, env, i64, i64)
|
|
DEF_HELPER_3(sub_suov, i32, env, i32, i32)
|
|
DEF_HELPER_3(sub_h_ssov, i32, env, i32, i32)
|
|
DEF_HELPER_3(sub_h_suov, i32, env, i32, i32)
|
|
DEF_HELPER_4(subr_h_ssov, i32, env, i64, i32, i32)
|
|
DEF_HELPER_4(subadr_h_ssov, i32, env, i64, i32, i32)
|
|
DEF_HELPER_3(mul_ssov, i32, env, i32, i32)
|
|
DEF_HELPER_3(mul_suov, i32, env, i32, i32)
|
|
DEF_HELPER_3(sha_ssov, i32, env, i32, i32)
|
|
DEF_HELPER_3(absdif_ssov, i32, env, i32, i32)
|
|
DEF_HELPER_4(madd32_ssov, i32, env, i32, i32, i32)
|
|
DEF_HELPER_4(madd32_suov, i32, env, i32, i32, i32)
|
|
DEF_HELPER_4(madd64_ssov, i64, env, i32, i64, i32)
|
|
DEF_HELPER_5(madd64_q_ssov, i64, env, i64, i32, i32, i32)
|
|
DEF_HELPER_3(madd32_q_add_ssov, i32, env, i64, i64)
|
|
DEF_HELPER_5(maddr_q_ssov, i32, env, i32, i32, i32, i32)
|
|
DEF_HELPER_4(madd64_suov, i64, env, i32, i64, i32)
|
|
DEF_HELPER_4(msub32_ssov, i32, env, i32, i32, i32)
|
|
DEF_HELPER_4(msub32_suov, i32, env, i32, i32, i32)
|
|
DEF_HELPER_4(msub64_ssov, i64, env, i32, i64, i32)
|
|
DEF_HELPER_5(msub64_q_ssov, i64, env, i64, i32, i32, i32)
|
|
DEF_HELPER_3(msub32_q_sub_ssov, i32, env, i64, i64)
|
|
DEF_HELPER_5(msubr_q_ssov, i32, env, i32, i32, i32, i32)
|
|
DEF_HELPER_4(msub64_suov, i64, env, i32, i64, i32)
|
|
DEF_HELPER_3(absdif_h_ssov, i32, env, i32, i32)
|
|
DEF_HELPER_2(abs_ssov, i32, env, i32)
|
|
DEF_HELPER_2(abs_h_ssov, i32, env, i32)
|
|
/* hword/byte arithmetic */
|
|
DEF_HELPER_2(abs_b, i32, env, i32)
|
|
DEF_HELPER_2(abs_h, i32, env, i32)
|
|
DEF_HELPER_3(absdif_b, i32, env, i32, i32)
|
|
DEF_HELPER_3(absdif_h, i32, env, i32, i32)
|
|
DEF_HELPER_4(addr_h, i32, env, i64, i32, i32)
|
|
DEF_HELPER_4(addsur_h, i32, env, i64, i32, i32)
|
|
DEF_HELPER_5(maddr_q, i32, env, i32, i32, i32, i32)
|
|
DEF_HELPER_3(add_b, i32, env, i32, i32)
|
|
DEF_HELPER_3(add_h, i32, env, i32, i32)
|
|
DEF_HELPER_3(sub_b, i32, env, i32, i32)
|
|
DEF_HELPER_3(sub_h, i32, env, i32, i32)
|
|
DEF_HELPER_4(subr_h, i32, env, i64, i32, i32)
|
|
DEF_HELPER_4(subadr_h, i32, env, i64, i32, i32)
|
|
DEF_HELPER_5(msubr_q, i32, env, i32, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(eq_b, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(eq_h, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(eqany_b, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(eqany_h, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(lt_b, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(lt_bu, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(lt_h, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(lt_hu, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(max_b, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(max_bu, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(max_h, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(max_hu, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(ixmax, TCG_CALL_NO_RWG_SE, i64, i64, i32)
|
|
DEF_HELPER_FLAGS_2(ixmax_u, TCG_CALL_NO_RWG_SE, i64, i64, i32)
|
|
DEF_HELPER_FLAGS_2(min_b, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(min_bu, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(min_h, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(min_hu, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(ixmin, TCG_CALL_NO_RWG_SE, i64, i64, i32)
|
|
DEF_HELPER_FLAGS_2(ixmin_u, TCG_CALL_NO_RWG_SE, i64, i64, i32)
|
|
/* count leading ... */
|
|
DEF_HELPER_FLAGS_1(clo_h, TCG_CALL_NO_RWG_SE, i32, i32)
|
|
DEF_HELPER_FLAGS_1(clz_h, TCG_CALL_NO_RWG_SE, i32, i32)
|
|
DEF_HELPER_FLAGS_1(cls_h, TCG_CALL_NO_RWG_SE, i32, i32)
|
|
/* sh */
|
|
DEF_HELPER_FLAGS_2(sh, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_2(sh_h, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_3(sha, i32, env, i32, i32)
|
|
DEF_HELPER_2(sha_h, i32, i32, i32)
|
|
/* merge/split/parity */
|
|
DEF_HELPER_FLAGS_2(bmerge, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_1(bsplit, TCG_CALL_NO_RWG_SE, i64, i32)
|
|
DEF_HELPER_FLAGS_1(parity, TCG_CALL_NO_RWG_SE, i32, i32)
|
|
/* float */
|
|
DEF_HELPER_FLAGS_4(pack, TCG_CALL_NO_RWG_SE, i32, i32, i32, i32, i32)
|
|
DEF_HELPER_1(unpack, i64, i32)
|
|
DEF_HELPER_3(fadd, i32, env, i32, i32)
|
|
DEF_HELPER_3(fsub, i32, env, i32, i32)
|
|
DEF_HELPER_3(fmul, i32, env, i32, i32)
|
|
DEF_HELPER_3(fdiv, i32, env, i32, i32)
|
|
DEF_HELPER_4(fmadd, i32, env, i32, i32, i32)
|
|
DEF_HELPER_4(fmsub, i32, env, i32, i32, i32)
|
|
DEF_HELPER_3(fcmp, i32, env, i32, i32)
|
|
DEF_HELPER_2(ftoi, i32, env, i32)
|
|
DEF_HELPER_2(itof, i32, env, i32)
|
|
DEF_HELPER_2(ftouz, i32, env, i32)
|
|
DEF_HELPER_2(updfl, void, env, i32)
|
|
/* dvinit */
|
|
DEF_HELPER_3(dvinit_b_13, i64, env, i32, i32)
|
|
DEF_HELPER_3(dvinit_b_131, i64, env, i32, i32)
|
|
DEF_HELPER_3(dvinit_h_13, i64, env, i32, i32)
|
|
DEF_HELPER_3(dvinit_h_131, i64, env, i32, i32)
|
|
DEF_HELPER_FLAGS_2(dvadj, TCG_CALL_NO_RWG_SE, i64, i64, i32)
|
|
DEF_HELPER_FLAGS_2(dvstep, TCG_CALL_NO_RWG_SE, i64, i64, i32)
|
|
DEF_HELPER_FLAGS_2(dvstep_u, TCG_CALL_NO_RWG_SE, i64, i64, i32)
|
|
DEF_HELPER_3(divide, i64, env, i32, i32)
|
|
DEF_HELPER_3(divide_u, i64, env, i32, i32)
|
|
/* mulh */
|
|
DEF_HELPER_FLAGS_5(mul_h, TCG_CALL_NO_RWG_SE, i64, i32, i32, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_5(mulm_h, TCG_CALL_NO_RWG_SE, i64, i32, i32, i32, i32, i32)
|
|
DEF_HELPER_FLAGS_5(mulr_h, TCG_CALL_NO_RWG_SE, i32, i32, i32, i32, i32, i32)
|
|
/* crc32 */
|
|
DEF_HELPER_FLAGS_2(crc32, TCG_CALL_NO_RWG_SE, i32, i32, i32)
|
|
/* CSA */
|
|
DEF_HELPER_2(call, void, env, i32)
|
|
DEF_HELPER_1(ret, void, env)
|
|
DEF_HELPER_2(bisr, void, env, i32)
|
|
DEF_HELPER_1(rfe, void, env)
|
|
DEF_HELPER_1(rfm, void, env)
|
|
DEF_HELPER_2(ldlcx, void, env, i32)
|
|
DEF_HELPER_2(lducx, void, env, i32)
|
|
DEF_HELPER_2(stlcx, void, env, i32)
|
|
DEF_HELPER_2(stucx, void, env, i32)
|
|
DEF_HELPER_1(svlcx, void, env)
|
|
DEF_HELPER_1(svucx, void, env)
|
|
DEF_HELPER_1(rslcx, void, env)
|
|
/* Address mode helper */
|
|
DEF_HELPER_1(br_update, i32, i32)
|
|
DEF_HELPER_2(circ_update, i32, i32, i32)
|
|
/* PSW cache helper */
|
|
DEF_HELPER_2(psw_write, void, env, i32)
|
|
DEF_HELPER_1(psw_read, i32, env)
|
|
/* Exceptions */
|
|
DEF_HELPER_3(raise_exception_sync, noreturn, env, i32, i32)
|