static inline cairo_int128_t det64x32_128 (cairo_int64_t a, int32_t b, cairo_int64_t c, int32_t d) { /* det = a * d - b * c */ return _cairo_int128_sub (_cairo_int64x32_128_mul (a, d), _cairo_int64x32_128_mul (c, b)); }
static void compute_inner_joint (cairo_point_t *p1, cairo_int64_t d_p1, const cairo_point_t *p2, cairo_int64_t d_p2, cairo_int64_t half_line_width) { int32_t dx = p2->x - p1->x; int32_t dy = p2->y - p1->y; half_line_width = _cairo_int64_sub (half_line_width, d_p1); d_p2 = _cairo_int64_sub (d_p2, d_p1); p1->x += _cairo_int_96by64_32x64_divrem (_cairo_int64x32_128_mul (half_line_width, dx), d_p2).quo; p1->y += _cairo_int_96by64_32x64_divrem (_cairo_int64x32_128_mul (half_line_width, dy), d_p2).quo; }