156 lines
1.8 KiB
Plaintext
156 lines
1.8 KiB
Plaintext
|
.TH MPC 1
|
||
|
.SH NAME
|
||
|
mpc \- extended precision arithmetic code generator
|
||
|
.SH SYNOPSIS
|
||
|
.B mpc
|
||
|
[
|
||
|
.I file ...
|
||
|
]
|
||
|
.SH DESCRIPTION
|
||
|
.I Mpc
|
||
|
generates C functions from a simple language that operates on
|
||
|
extended precision integers using the
|
||
|
.IR mp (2)
|
||
|
library.
|
||
|
.SH LANGUAGE
|
||
|
The language consists of a series of function definitions of the form:
|
||
|
.IP
|
||
|
.I name
|
||
|
(
|
||
|
.I "parameter list"
|
||
|
) {
|
||
|
.I statements
|
||
|
}
|
||
|
.PP
|
||
|
All variables and parameters are extended precision integers and are
|
||
|
passed by reference. Statements are separated by semicolon and the
|
||
|
following statemens are defined:
|
||
|
.IP
|
||
|
.I name
|
||
|
.B =
|
||
|
.I expression
|
||
|
.IP
|
||
|
.B if
|
||
|
(
|
||
|
.I condition
|
||
|
) {
|
||
|
.I statements
|
||
|
}
|
||
|
.B "else if"
|
||
|
(
|
||
|
.I condition
|
||
|
) {
|
||
|
.I statements
|
||
|
}
|
||
|
.B else
|
||
|
{
|
||
|
.I statements
|
||
|
}
|
||
|
.IP
|
||
|
.B while
|
||
|
(
|
||
|
.I condition
|
||
|
) {
|
||
|
.I statements
|
||
|
}
|
||
|
.IP
|
||
|
.B break
|
||
|
.IP
|
||
|
.I
|
||
|
name
|
||
|
(
|
||
|
.I "parameter list"
|
||
|
)
|
||
|
.IP
|
||
|
.B
|
||
|
mod
|
||
|
(
|
||
|
.I modulus
|
||
|
) {
|
||
|
.I statements
|
||
|
}
|
||
|
.PP
|
||
|
There is no distinction between input and output parameters, but
|
||
|
conventionally, the outputs are put at the end of the
|
||
|
.I "parameter list"
|
||
|
and the language allows one to write
|
||
|
.IP
|
||
|
.I F
|
||
|
(
|
||
|
.IR X ,
|
||
|
.IR Y ,
|
||
|
.I Z
|
||
|
)
|
||
|
as
|
||
|
.IR Y ,
|
||
|
.I Z
|
||
|
.B =
|
||
|
.I F
|
||
|
(
|
||
|
.I X
|
||
|
)
|
||
|
.PP
|
||
|
Expressions are composed out of the following arithmetic operations:
|
||
|
.RS
|
||
|
.TF _____________
|
||
|
.TP
|
||
|
.B +
|
||
|
addition.
|
||
|
.TP
|
||
|
.B -
|
||
|
subtraction.
|
||
|
.TP
|
||
|
.B *
|
||
|
multiplication.
|
||
|
.TP
|
||
|
.B /
|
||
|
division, or multiplicative inverse when enclosed in
|
||
|
.B mod
|
||
|
block.
|
||
|
.TP
|
||
|
.B %
|
||
|
division remainder.
|
||
|
.TP
|
||
|
.B ^
|
||
|
exponentiation.
|
||
|
.TP
|
||
|
.BI >> constant
|
||
|
right shift by a constant.
|
||
|
.TP
|
||
|
.BI << constant
|
||
|
left shift by a constant.
|
||
|
.TP
|
||
|
.IB condition ? a : b
|
||
|
pick
|
||
|
.I a
|
||
|
when
|
||
|
.I condition is true, otherwise
|
||
|
.I b
|
||
|
when false.
|
||
|
.RE
|
||
|
.PD
|
||
|
.PP
|
||
|
Conditions can use the following operations:
|
||
|
.RS
|
||
|
.TF _____________
|
||
|
.TP
|
||
|
.B ==
|
||
|
equality.
|
||
|
.TP
|
||
|
.B !=
|
||
|
inequality.
|
||
|
.TP
|
||
|
.B >
|
||
|
bigger than.
|
||
|
.TP
|
||
|
.B <
|
||
|
smaller than.
|
||
|
.TP
|
||
|
.BI ! condition
|
||
|
negation.
|
||
|
.RE
|
||
|
.SH SOURCE
|
||
|
.B /sys/src/cmd/mpc.y
|
||
|
.SH "SEE ALSO"
|
||
|
.IR mp (2)
|