You can always find out if some operation on a param is a compile-time operation by trying to store it in a a new param.
use Math;
param x = 0.0:real(32); // no compilation error, so this cast is implemented as param
param y = ~1; // no compilation error, so ~ is implemented on param int
param z = gcd(6, 12); // error: Initializing parameter 'z' to value not known at compile time
Let us know if you come across something that you expect to have a param result but gives the error like above.