extern void fgoldi_sub(fgoldi */*z*/,
const fgoldi */*x*/, const fgoldi */*y*/);
+/* --- @fgoldi_neg@ --- *
+ *
+ * Arguments: @fgoldi *z@ = where to put the result (may alias @x@)
+ * @const fgoldi *x@ = an operand
+ *
+ * Returns: ---
+ *
+ * Use: Set @z = -x@.
+ */
+
+extern void fgoldi_neg(fgoldi */*z*/, const fgoldi */*x*/);
+
+/* --- @fgoldi_pick2@ --- *
+ *
+ * Arguments: @fgoldi *z@ = where to put the result (may alias @x@ or @y@)
+ * @const fgoldi *x, *y@ = two operands
+ * @uint32 m@ = a mask
+ *
+ * Returns: ---
+ *
+ * Use: If @m@ is zero, set @z = y@; if @m@ is all-bits-set, then set
+ * @z = x@. If @m@ has some other value, then scramble @z@ in
+ * an unhelpful way.
+ */
+
+extern void fgoldi_pick2(fgoldi */*z*/,
+ const fgoldi */*x*/, const fgoldi */*y*/,
+ uint32 /*m*/);
+
+/* --- @fgoldi_pickn@ --- *
+ *
+ * Arguments: @fgoldi *z@ = where to put the result
+ * @const fgoldi *v@ = a table of entries
+ * @size_t n@ = the number of entries in @v@
+ * @size_t i@ = an index
+ *
+ * Returns: ---
+ *
+ * Use: If @0 <= i < n < 32@ then set @z = v[i]@. If @n >= 32@ then
+ * do something unhelpful; otherwise, if @i >= n@ then set @z@
+ * to zero.
+ */
+
+extern void fgoldi_pickn(fgoldi */*z*/,
+ const fgoldi */*v*/, size_t /*n*/, size_t /*i*/);
+
/* --- @fgoldi_condswap@ --- *
*
* Arguments: @fgoldi *x, *y@ = two operands
extern void fgoldi_condswap(fgoldi */*x*/, fgoldi */*y*/, uint32 /*m*/);
+/* --- @fgoldi_condneg@ --- *
+ *
+ * Arguments: @fgoldi *z@ = where to put the result (may alias @x@)
+ * @const fgoldi *x@ = an operand
+ * @uint32 m@ = a mask
+ *
+ * Returns: ---
+ *
+ * Use: If @m@ is zero, set @z = x@; if @m@ is all-bits-set, then set
+ * @z = -x@. If @m@ has some other value then scramble @z@ in
+ * an unhelpful way.
+ */
+
+extern void fgoldi_condneg(fgoldi */*z*/, const fgoldi */*x*/, uint32 /*m*/);
+
/* --- @fgoldi_mulconst@ --- *
*
* Arguments: @fgoldi *z@ = where to put the result (may alias @x@)
extern void fgoldi_inv(fgoldi */*z*/, const fgoldi */*x*/);
+/* --- @fgoldi_quosqrt@ --- *
+ *
+ * Arguments: @fgoldi *z@ = where to put the result (may alias @x@ or @y@)
+ * @const fgoldi *x, *y@ = two operands
+ *
+ * Returns: Zero if successful, @-1@ if %$x/y$% is not a square.
+ *
+ * Use: Stores in @z@ the one of the square roots %$\pm\sqrt{x/y}$%.
+ * If %$x = y = 0% then the result is zero; if %$y = 0$% but %$x
+ * \ne 0$% then the operation fails. If you wanted a specific
+ * square root then you'll have to pick it yourself.
+ */
+
+extern int fgoldi_quosqrt(fgoldi */*z*/,
+ const fgoldi */*x*/, const fgoldi */*y*/);
+
/*----- That's all, folks -------------------------------------------------*/
#ifdef __cplusplus