| // Verify that our intrinsics generate the correct LLVM calls for f128 |
| |
| #![crate_type = "lib"] |
| #![feature(f128)] |
| #![feature(core_intrinsics)] |
| |
| // CHECK-LABEL: i1 @f128_eq( |
| #[no_mangle] |
| pub fn f128_eq(a: f128, b: f128) -> bool { |
| // CHECK: fcmp oeq fp128 %{{.+}}, %{{.+}} |
| a == b |
| } |
| |
| // CHECK-LABEL: i1 @f128_ne( |
| #[no_mangle] |
| pub fn f128_ne(a: f128, b: f128) -> bool { |
| // CHECK: fcmp une fp128 %{{.+}}, %{{.+}} |
| a != b |
| } |
| |
| // CHECK-LABEL: i1 @f128_gt( |
| #[no_mangle] |
| pub fn f128_gt(a: f128, b: f128) -> bool { |
| // CHECK: fcmp ogt fp128 %{{.+}}, %{{.+}} |
| a > b |
| } |
| |
| // CHECK-LABEL: i1 @f128_ge( |
| #[no_mangle] |
| pub fn f128_ge(a: f128, b: f128) -> bool { |
| // CHECK: fcmp oge fp128 %{{.+}}, %{{.+}} |
| a >= b |
| } |
| |
| // CHECK-LABEL: i1 @f128_lt( |
| #[no_mangle] |
| pub fn f128_lt(a: f128, b: f128) -> bool { |
| // CHECK: fcmp olt fp128 %{{.+}}, %{{.+}} |
| a < b |
| } |
| |
| // CHECK-LABEL: i1 @f128_le( |
| #[no_mangle] |
| pub fn f128_le(a: f128, b: f128) -> bool { |
| // CHECK: fcmp ole fp128 %{{.+}}, %{{.+}} |
| a <= b |
| } |
| |
| // CHECK-LABEL: fp128 @f128_neg( |
| #[no_mangle] |
| pub fn f128_neg(a: f128) -> f128 { |
| // CHECK: fneg fp128 |
| -a |
| } |
| |
| // CHECK-LABEL: fp128 @f128_add( |
| #[no_mangle] |
| pub fn f128_add(a: f128, b: f128) -> f128 { |
| // CHECK: fadd fp128 %{{.+}}, %{{.+}} |
| a + b |
| } |
| |
| // CHECK-LABEL: fp128 @f128_sub( |
| #[no_mangle] |
| pub fn f128_sub(a: f128, b: f128) -> f128 { |
| // CHECK: fsub fp128 %{{.+}}, %{{.+}} |
| a - b |
| } |
| |
| // CHECK-LABEL: fp128 @f128_mul( |
| #[no_mangle] |
| pub fn f128_mul(a: f128, b: f128) -> f128 { |
| // CHECK: fmul fp128 %{{.+}}, %{{.+}} |
| a * b |
| } |
| |
| // CHECK-LABEL: fp128 @f128_div( |
| #[no_mangle] |
| pub fn f128_div(a: f128, b: f128) -> f128 { |
| // CHECK: fdiv fp128 %{{.+}}, %{{.+}} |
| a / b |
| } |
| |
| // CHECK-LABEL: fp128 @f128_rem( |
| #[no_mangle] |
| pub fn f128_rem(a: f128, b: f128) -> f128 { |
| // CHECK: frem fp128 %{{.+}}, %{{.+}} |
| a % b |
| } |
| |
| // CHECK-LABEL: void @f128_add_assign( |
| #[no_mangle] |
| pub fn f128_add_assign(a: &mut f128, b: f128) { |
| // CHECK: fadd fp128 %{{.+}}, %{{.+}} |
| // CHECK-NEXT: store fp128 %{{.+}}, ptr %{{.+}} |
| *a += b; |
| } |
| |
| // CHECK-LABEL: void @f128_sub_assign( |
| #[no_mangle] |
| pub fn f128_sub_assign(a: &mut f128, b: f128) { |
| // CHECK: fsub fp128 %{{.+}}, %{{.+}} |
| // CHECK-NEXT: store fp128 %{{.+}}, ptr %{{.+}} |
| *a -= b; |
| } |
| |
| // CHECK-LABEL: void @f128_mul_assign( |
| #[no_mangle] |
| pub fn f128_mul_assign(a: &mut f128, b: f128) { |
| // CHECK: fmul fp128 %{{.+}}, %{{.+}} |
| // CHECK-NEXT: store fp128 %{{.+}}, ptr %{{.+}} |
| *a *= b |
| } |
| |
| // CHECK-LABEL: void @f128_div_assign( |
| #[no_mangle] |
| pub fn f128_div_assign(a: &mut f128, b: f128) { |
| // CHECK: fdiv fp128 %{{.+}}, %{{.+}} |
| // CHECK-NEXT: store fp128 %{{.+}}, ptr %{{.+}} |
| *a /= b |
| } |
| |
| // CHECK-LABEL: void @f128_rem_assign( |
| #[no_mangle] |
| pub fn f128_rem_assign(a: &mut f128, b: f128) { |
| // CHECK: frem fp128 %{{.+}}, %{{.+}} |
| // CHECK-NEXT: store fp128 %{{.+}}, ptr %{{.+}} |
| *a %= b |
| } |