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;
}