On Thursday, 12 January 2017 at 16:55:10 UTC, Nordlöw wrote:
On Thursday, 12 January 2017 at 09:19:26 UTC, Russel Winder wrote:
Is the intention for this to stand with or replace std.bigint ?

I have no plan yet. I'm just gonna work on it for fun until it covers most of GNU MP. Pull requests are very welcome.

What would be cool would be a way for D to generate 'optimal' gmp code. So a template function that takes in an expression, and output's D / GMP code that uses minimal allocation.

ulong a = 27, b = 84, c = 110, d = 133;
compileGMP!"Integer res = a ^^ 5 + b ^^ 5 + c ^^ 5 + d ^^ 5"();

might generate the code:
Integer res, r2; //r2 used as a register of sorts (minimise allocation of Integers)
mpz_init(res); mpz_init(r2);

mpz_ui_pow_ui(res, a, 5);
mpz_ui_pow_ui(r2, b, 5);
mpz_add(res, res, r2);

mpz_ui_pow_ui(res, c 5);
mpz_add(res, res, r2);

mpz_ui_pow_ui(r2, d, 5);
mpz_add(res, res, r2);

Obviously the compileGMP function would need to know a bit about the types, but that can be arranged. Just something to think about ;)

Reply via email to