+static void
+_vfp_fmar_f(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+ jit_int32_t t0;
+ /* untested */
+ if (0 && jit_cpu.vfp >= 4) {
+ if (r0 != r2 && r0 != r3) {
+ vfp_movr_f(r0, r1);
+ VFMA_F32(r0, r2, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_movr_f(rn(t0), r1);
+ VFMA_F32(rn(t0), r2, r3);
+ vfp_movr_f(r0, rn(t0));
+ jit_unget_reg(t0);
+ }
+ }
+ else {
+ if (r0 != r3) {
+ vfp_mulr_f(r0, r1, r2);
+ vfp_addr_f(r0, r0, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_mulr_f(rn(t0), r1, r2);
+ vfp_addr_f(r0, rn(t0), r3);
+ jit_unget_reg(t0);
+ }
+ }
+}
+
+static void
+_vfp_fmsr_f(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+ jit_int32_t t0;
+ /* untested */
+ if (0 && jit_cpu.vfp >= 4) {
+ if (r0 != r2 && r0 != r3) {
+ vfp_movr_f(r0, r1);
+ VFMS_F32(r0, r2, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_movr_f(rn(t0), r1);
+ VFMS_F32(rn(t0), r2, r3);
+ vfp_movr_f(r0, rn(t0));
+ jit_unget_reg(t0);
+ }
+ vfp_negr_f(r0, r0);
+ }
+ else {
+ if (r0 != r3) {
+ vfp_mulr_f(r0, r1, r2);
+ vfp_subr_f(r0, r0, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_mulr_f(rn(t0), r1, r2);
+ vfp_subr_f(r0, rn(t0), r3);
+ jit_unget_reg(t0);
+ }
+ }
+}
+
+static void
+_vfp_fnmar_f(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+ jit_int32_t t0;
+ /* untested */
+ if (0 && jit_cpu.vfp >= 4) {
+ if (r0 != r2 && r0 != r3) {
+ vfp_movr_f(r0, r1);
+ VFNMA_F32(r0, r2, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_movr_f(rn(t0), r1);
+ VFNMA_F32(rn(t0), r2, r3);
+ vfp_movr_f(r0, rn(t0));
+ jit_unget_reg(t0);
+ }
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_negr_f(rn(t0), r1);
+ vfp_mulr_f(rn(t0), rn(t0), r2);
+ vfp_subr_f(r0, rn(t0), r3);
+ jit_unget_reg(t0);
+ }
+}
+
+static void
+_vfp_fnmsr_f(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+ jit_int32_t t0;
+ /* untested */
+ if (0 && jit_cpu.vfp >= 4) {
+ if (r0 != r2 && r0 != r3) {
+ vfp_movr_f(r0, r1);
+ VFNMS_F32(r0, r2, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_movr_f(rn(t0), r1);
+ VFNMS_F32(rn(t0), r2, r3);
+ vfp_movr_f(r0, rn(t0));
+ jit_unget_reg(t0);
+ }
+ vfp_negr_f(r0, r0);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_negr_f(rn(t0), r1);
+ vfp_mulr_f(rn(t0), rn(t0), r2);
+ vfp_addr_f(r0, rn(t0), r3);
+ jit_unget_reg(t0);
+ }
+}
+
+static void
+_vfp_fmar_d(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+ jit_int32_t t0;
+ /* untested */
+ if (0 && jit_cpu.vfp >= 4) {
+ if (r0 != r2 && r0 != r3) {
+ vfp_movr_d(r0, r1);
+ VFMA_F64(r0, r2, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_movr_d(rn(t0), r1);
+ VFMA_F64(rn(t0), r2, r3);
+ vfp_movr_d(r0, rn(t0));
+ jit_unget_reg(t0);
+ }
+ }
+ else {
+ if (r0 != r3) {
+ vfp_mulr_d(r0, r1, r2);
+ vfp_addr_d(r0, r0, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_mulr_d(rn(t0), r1, r2);
+ vfp_addr_d(r0, rn(t0), r3);
+ jit_unget_reg(t0);
+ }
+ }
+}
+
+static void
+_vfp_fmsr_d(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+ jit_int32_t t0;
+ /* untested */
+ if (0 && jit_cpu.vfp >= 4) {
+ if (r0 != r2 && r0 != r3) {
+ vfp_movr_d(r0, r1);
+ VFMS_F64(r0, r2, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_movr_d(rn(t0), r1);
+ VFMS_F64(rn(t0), r2, r3);
+ vfp_movr_d(r0, rn(t0));
+ jit_unget_reg(t0);
+ }
+ vfp_negr_d(r0, r0);
+ }
+ else {
+ if (r0 != r3) {
+ vfp_mulr_d(r0, r1, r2);
+ vfp_subr_d(r0, r0, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_mulr_d(rn(t0), r1, r2);
+ vfp_subr_d(r0, rn(t0), r3);
+ jit_unget_reg(t0);
+ }
+ }
+}
+
+static void
+_vfp_fnmar_d(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+ jit_int32_t t0;
+ /* untested */
+ if (0 && jit_cpu.vfp >= 4) {
+ if (r0 != r2 && r0 != r3) {
+ vfp_movr_d(r0, r1);
+ VFNMA_F64(r0, r2, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_movr_d(rn(t0), r1);
+ VFNMA_F64(rn(t0), r2, r3);
+ vfp_movr_d(r0, rn(t0));
+ jit_unget_reg(t0);
+ }
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_negr_d(rn(t0), r1);
+ vfp_mulr_d(rn(t0), rn(t0), r2);
+ vfp_subr_d(r0, rn(t0), r3);
+ jit_unget_reg(t0);
+ }
+}
+
+static void
+_vfp_fnmsr_d(jit_state_t *_jit,
+ jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
+{
+ jit_int32_t t0;
+ /* untested */
+ if (0 && jit_cpu.vfp >= 4) {
+ if (r0 != r2 && r0 != r3) {
+ vfp_movr_d(r0, r1);
+ VFNMS_F64(r0, r2, r3);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_movr_d(rn(t0), r1);
+ VFNMS_F64(rn(t0), r2, r3);
+ vfp_movr_d(r0, rn(t0));
+ jit_unget_reg(t0);
+ }
+ vfp_negr_d(r0, r0);
+ }
+ else {
+ t0 = jit_get_reg(jit_class_fpr);
+ vfp_negr_d(rn(t0), r1);
+ vfp_mulr_d(rn(t0), rn(t0), r2);
+ vfp_addr_d(r0, rn(t0), r3);
+ jit_unget_reg(t0);
+ }
+}
+