Skip to content

Commit

Permalink
[truffle] Implement a bunch of _n trigonometric ops
Browse files Browse the repository at this point in the history
nqp::<asec asin acos atan atan2 cos cosh sin sinh sec sech tan tanh>
  • Loading branch information
MasterDuke17 committed Jul 3, 2018
1 parent 4c36904 commit afa9494
Show file tree
Hide file tree
Showing 14 changed files with 267 additions and 0 deletions.
5 changes: 5 additions & 0 deletions nqp-truffle.nqp
Expand Up @@ -189,6 +189,11 @@ class QAST::OperationsTruffle {

add_simple_op('pow_n', $NUM, [$NUM, $NUM]);

for <asec asin acos atan cos cosh sin sinh sec sech tan tanh> -> $math-op {
add_simple_op($math-op ~ '_n', $NUM, [$NUM]);
}

add_simple_op('atan2_n', $NUM, [$NUM, $NUM]);
for <postinc postdec> -> $op {
add_op($op, sub ($comp, $node, :$want) {
my $old_value := $comp.as_truffle($node[0], :want($INT));
Expand Down
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "acos_n")
public final class NQPAcosNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPAcosNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.acos(argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "asec_n")
public final class NQPAsecNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPAsecNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.acos(1 / argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "asin_n")
public final class NQPAsinNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPAsinNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.asin(argNode.executeNum(frame));
}
}
@@ -0,0 +1,22 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "atan2_n")
public final class NQPAtan2NumNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPAtan2NumNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.atan2(leftNode.executeNum(frame), rightNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "atan_n")
public final class NQPAtanNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPAtanNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.atan(argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "cos_n")
public final class NQPCosNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPCosNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.cos(argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "cosh_n")
public final class NQPCoshNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPCoshNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.cosh(argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "sec_n")
public final class NQPSecNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPSecNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return 1 / Math.cos(argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "sech_n")
public final class NQPSechNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPSechNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return 1 / Math.cosh(argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "sin_n")
public final class NQPSinNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPSinNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.sin(argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "sinh_n")
public final class NQPSinhNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPSinhNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.sinh(argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "tan_n")
public final class NQPTanNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPTanNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.tan(argNode.executeNum(frame));
}
}
@@ -0,0 +1,20 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "tanh_n")
public final class NQPTanhNumNode extends NQPNode {
@Child private NQPNode argNode;

@Deserializer
public NQPTanhNumNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public double executeNum(VirtualFrame frame) {
return Math.tanh(argNode.executeNum(frame));
}
}

0 comments on commit afa9494

Please sign in to comment.