Chromium Code Reviews| Index: src/compiler/code-stub-assembler.cc |
| diff --git a/src/compiler/code-stub-assembler.cc b/src/compiler/code-stub-assembler.cc |
| index 9fcd2ad74b849f5114ebc7d057d52393b56850a7..ac10a98c5c0fc10b6aca5ebc258924806a0c3e1e 100644 |
| --- a/src/compiler/code-stub-assembler.cc |
| +++ b/src/compiler/code-stub-assembler.cc |
| @@ -171,6 +171,21 @@ Node* CodeStubAssembler::SmiLessThanOrEqual(Node* a, Node* b) { |
| return IntPtrLessThanOrEqual(a, b); |
| } |
| +Node* CodeStubAssembler::SmiMin(Node* a, Node* b) { |
| + // TODO(bmeurer): Consider using Select once available. |
| + Variable min(this, MachineRepresentation::kTagged); |
| + Label if_a(this), if_b(this), join(this); |
| + BranchIfSmiLessThan(a, b, &if_a, &if_b); |
| + Bind(&if_a); |
| + min.Bind(a); |
| + Goto(&join); |
| + Bind(&if_b); |
| + min.Bind(b); |
| + Goto(&join); |
| + Bind(&join); |
| + return min.value(); |
| +} |
| + |
| #define DEFINE_CODE_STUB_ASSEMBER_BINARY_OP(name) \ |
| Node* CodeStubAssembler::name(Node* a, Node* b) { \ |
| return raw_assembler_->name(a, b); \ |
| @@ -424,6 +439,16 @@ Node* CodeStubAssembler::BitFieldDecode(Node* word32, uint32_t shift, |
| raw_assembler_->Int32Constant(shift)); |
| } |
| +void CodeStubAssembler::BranchIfInt32LessThan(Node* a, Node* b, Label* if_true, |
|
epertoso
2016/03/04 09:22:25
Do we really need this? If so, it seems to me that
Benedikt Meurer
2016/03/04 09:25:38
That's not correct because of edge-split-form, and
epertoso
2016/03/04 09:35:16
Oh, I see what you mean. You use if_less and if_gr
|
| + Label* if_false) { |
| + Label if_lessthan(this), if_notlessthan(this); |
| + Branch(Int32LessThan(a, b), &if_lessthan, &if_notlessthan); |
| + Bind(&if_lessthan); |
| + Goto(if_true); |
| + Bind(&if_notlessthan); |
| + Goto(if_false); |
| +} |
| + |
| void CodeStubAssembler::BranchIfSmiLessThan(Node* a, Node* b, Label* if_true, |
| Label* if_false) { |
| Label if_lessthan(this), if_notlessthan(this); |