@@ -344,21 +344,25 @@ extern pure def cos(x: Double): Double =
344
344
js "Math.cos(${x})"
345
345
chez "(cos ${x})"
346
346
vm "effekt::cos(Double)"
347
+ llvm "%z = call %Double @llvm.cos.f64(double ${x}) ret %Double %z"
347
348
348
349
extern pure def sin(x: Double): Double =
349
350
js "Math.sin(${x})"
350
351
chez "(sin ${x})"
351
352
vm "effekt::sin(Double)"
353
+ llvm "%z = call %Double @llvm.sin.f64(double ${x}) ret %Double %z"
352
354
353
355
extern pure def atan(x: Double): Double =
354
356
js "Math.atan(${x})"
355
357
chez "(atan ${x})"
356
358
vm "effekt::atan(Double)"
359
+ llvm "%z = call %Double @atan(double ${x}) ret %Double %z"
357
360
358
361
extern pure def tan(x: Double): Double =
359
362
js "Math.tan(${x})"
360
363
chez "(tan ${x})"
361
364
vm "effekt::tan(Double)"
365
+ llvm "%z = call %Double @tan(double ${x}) ret %Double %z"
362
366
363
367
extern pure def sqrt(x: Double): Double =
364
368
js "Math.sqrt(${x})"
@@ -381,15 +385,18 @@ extern pure def log(x: Double): Double =
381
385
js "Math.log(${x})"
382
386
chez "(log ${x})"
383
387
vm "effekt::log(Double)"
388
+ llvm "%z = call %Double @llvm.log.f64(double ${x}) ret %Double %z"
384
389
385
390
extern pure def log1p(x: Double): Double =
386
391
js "Math.log1p(${x})"
387
392
chez "(log (+ ${x} 1))"
393
+ llvm "%z = call %Double @log1p(double ${x}) ret %Double %z"
388
394
389
395
extern pure def exp(x: Double): Double =
390
396
js "Math.exp(${x})"
391
397
chez "(exp ${x})"
392
398
vm "effekt::exp(Double)"
399
+ llvm "%z = call %Double @llvm.exp.f64(double ${x}) ret %Double %z"
393
400
394
401
def pow(base: Double, exponent: Int): Double = {
395
402
def loop(base: Double, exponent: Int, acc: Double): Double = {
@@ -408,12 +415,14 @@ extern pure def pow(base: Double, exponent: Double): Double =
408
415
js "Math.pow(${base}, ${exponent})"
409
416
chez "(expt ${base} ${exponent})"
410
417
vm "effekt::pow(Double, Double)"
418
+ llvm "%z = call %Double @llvm.pow.f64(double ${base}, double ${exponent}) ret %Double %z"
411
419
412
420
// since we do not have "extern val", yet
413
421
extern pure def _pi(): Double =
414
422
js "Math.PI"
415
423
chez "(* 4 (atan 1))"
416
424
vm "effekt::pi()"
425
+ llvm "ret double 3.14159265358979323846264338327950288419716939937510582097494459"
417
426
418
427
val PI: Double = _pi()
419
428
0 commit comments