Home
last modified time | relevance | path

Searched defs:instruction (Results 1 – 25 of 77) sorted by relevance

1234

/art/compiler/optimizing/
Dcode_generator_vector_arm_vixl.cc36 void LocationsBuilderARMVIXL::VisitVecReplicateScalar(HVecReplicateScalar* instruction) { in VisitVecReplicateScalar()
54 void InstructionCodeGeneratorARMVIXL::VisitVecReplicateScalar(HVecReplicateScalar* instruction) { in VisitVecReplicateScalar()
79 void LocationsBuilderARMVIXL::VisitVecExtractScalar(HVecExtractScalar* instruction) { in VisitVecExtractScalar()
92 void InstructionCodeGeneratorARMVIXL::VisitVecExtractScalar(HVecExtractScalar* instruction) { in VisitVecExtractScalar()
107 static void CreateVecUnOpLocations(ArenaAllocator* allocator, HVecUnaryOperation* instruction) { in CreateVecUnOpLocations()
130 void LocationsBuilderARMVIXL::VisitVecReduce(HVecReduce* instruction) { in VisitVecReduce()
134 void InstructionCodeGeneratorARMVIXL::VisitVecReduce(HVecReduce* instruction) { in VisitVecReduce()
159 void LocationsBuilderARMVIXL::VisitVecCnv(HVecCnv* instruction) { in VisitVecCnv()
163 void InstructionCodeGeneratorARMVIXL::VisitVecCnv(HVecCnv* instruction) { in VisitVecCnv()
167 void LocationsBuilderARMVIXL::VisitVecNeg(HVecNeg* instruction) { in VisitVecNeg()
[all …]
Dconstant_folding.cc134 void InstructionWithAbsorbingInputSimplifier::VisitShift(HBinaryOperation* instruction) { in VisitShift()
147 void InstructionWithAbsorbingInputSimplifier::VisitEqual(HEqual* instruction) { in VisitEqual()
159 void InstructionWithAbsorbingInputSimplifier::VisitNotEqual(HNotEqual* instruction) { in VisitNotEqual()
171 void InstructionWithAbsorbingInputSimplifier::VisitAbove(HAbove* instruction) { in VisitAbove()
183 void InstructionWithAbsorbingInputSimplifier::VisitAboveOrEqual(HAboveOrEqual* instruction) { in VisitAboveOrEqual()
195 void InstructionWithAbsorbingInputSimplifier::VisitBelow(HBelow* instruction) { in VisitBelow()
207 void InstructionWithAbsorbingInputSimplifier::VisitBelowOrEqual(HBelowOrEqual* instruction) { in VisitBelowOrEqual()
219 void InstructionWithAbsorbingInputSimplifier::VisitAnd(HAnd* instruction) { in VisitAnd()
251 void InstructionWithAbsorbingInputSimplifier::VisitCompare(HCompare* instruction) { in VisitCompare()
271 void InstructionWithAbsorbingInputSimplifier::VisitMul(HMul* instruction) { in VisitMul()
[all …]
Dcode_generator_vector_x86_64.cc28 void LocationsBuilderX86_64::VisitVecReplicateScalar(HVecReplicateScalar* instruction) { in VisitVecReplicateScalar()
57 void InstructionCodeGeneratorX86_64::VisitVecReplicateScalar(HVecReplicateScalar* instruction) { in VisitVecReplicateScalar()
111 void LocationsBuilderX86_64::VisitVecExtractScalar(HVecExtractScalar* instruction) { in VisitVecExtractScalar()
135 void InstructionCodeGeneratorX86_64::VisitVecExtractScalar(HVecExtractScalar* instruction) { in VisitVecExtractScalar()
167 static void CreateVecUnOpLocations(ArenaAllocator* allocator, HVecUnaryOperation* instruction) { in CreateVecUnOpLocations()
188 void LocationsBuilderX86_64::VisitVecReduce(HVecReduce* instruction) { in VisitVecReduce()
198 void InstructionCodeGeneratorX86_64::VisitVecReduce(HVecReduce* instruction) { in VisitVecReduce()
240 void LocationsBuilderX86_64::VisitVecCnv(HVecCnv* instruction) { in VisitVecCnv()
244 void InstructionCodeGeneratorX86_64::VisitVecCnv(HVecCnv* instruction) { in VisitVecCnv()
258 void LocationsBuilderX86_64::VisitVecNeg(HVecNeg* instruction) { in VisitVecNeg()
[all …]
Dcode_generator_vector_x86.cc28 void LocationsBuilderX86::VisitVecReplicateScalar(HVecReplicateScalar* instruction) { in VisitVecReplicateScalar()
62 void InstructionCodeGeneratorX86::VisitVecReplicateScalar(HVecReplicateScalar* instruction) { in VisitVecReplicateScalar()
120 void LocationsBuilderX86::VisitVecExtractScalar(HVecExtractScalar* instruction) { in VisitVecExtractScalar()
147 void InstructionCodeGeneratorX86::VisitVecExtractScalar(HVecExtractScalar* instruction) { in VisitVecExtractScalar()
184 static void CreateVecUnOpLocations(ArenaAllocator* allocator, HVecUnaryOperation* instruction) { in CreateVecUnOpLocations()
205 void LocationsBuilderX86::VisitVecReduce(HVecReduce* instruction) { in VisitVecReduce()
215 void InstructionCodeGeneratorX86::VisitVecReduce(HVecReduce* instruction) { in VisitVecReduce()
257 void LocationsBuilderX86::VisitVecCnv(HVecCnv* instruction) { in VisitVecCnv()
261 void InstructionCodeGeneratorX86::VisitVecCnv(HVecCnv* instruction) { in VisitVecCnv()
275 void LocationsBuilderX86::VisitVecNeg(HVecNeg* instruction) { in VisitVecNeg()
[all …]
Dinstruction_simplifier_arm64.cc64 HInstruction* instruction = it.Current(); in VisitBasicBlock() local
191 void InstructionSimplifierArm64Visitor::VisitAnd(HAnd* instruction) { in VisitAnd()
197 void InstructionSimplifierArm64Visitor::VisitArrayGet(HArrayGet* instruction) { in VisitArrayGet()
207 void InstructionSimplifierArm64Visitor::VisitArraySet(HArraySet* instruction) { in VisitArraySet()
218 void InstructionSimplifierArm64Visitor::VisitMul(HMul* instruction) { in VisitMul()
224 void InstructionSimplifierArm64Visitor::VisitOr(HOr* instruction) { in VisitOr()
230 void InstructionSimplifierArm64Visitor::VisitShl(HShl* instruction) { in VisitShl()
236 void InstructionSimplifierArm64Visitor::VisitShr(HShr* instruction) { in VisitShr()
242 void InstructionSimplifierArm64Visitor::VisitTypeConversion(HTypeConversion* instruction) { in VisitTypeConversion()
256 void InstructionSimplifierArm64Visitor::VisitUShr(HUShr* instruction) { in VisitUShr()
[all …]
Dlocations.cc29 LocationSummary::LocationSummary(HInstruction* instruction, in LocationSummary()
50 LocationSummary::LocationSummary(HInstruction* instruction, in LocationSummary()
58 Location Location::RegisterOrConstant(HInstruction* instruction) { in RegisterOrConstant()
64 Location Location::RegisterOrInt32Constant(HInstruction* instruction) { in RegisterOrInt32Constant()
75 Location Location::FpuRegisterOrInt32Constant(HInstruction* instruction) { in FpuRegisterOrInt32Constant()
86 Location Location::ByteRegisterOrConstant(int reg, HInstruction* instruction) { in ByteRegisterOrConstant()
92 Location Location::FpuRegisterOrConstant(HInstruction* instruction) { in FpuRegisterOrConstant()
Dcode_generator_vector_arm64.cc50 void LocationsBuilderARM64::VisitVecReplicateScalar(HVecReplicateScalar* instruction) { in VisitVecReplicateScalar()
81 void InstructionCodeGeneratorARM64::VisitVecReplicateScalar(HVecReplicateScalar* instruction) { in VisitVecReplicateScalar()
143 void LocationsBuilderARM64::VisitVecExtractScalar(HVecExtractScalar* instruction) { in VisitVecExtractScalar()
167 void InstructionCodeGeneratorARM64::VisitVecExtractScalar(HVecExtractScalar* instruction) { in VisitVecExtractScalar()
192 static void CreateVecUnOpLocations(ArenaAllocator* allocator, HVecUnaryOperation* instruction) { in CreateVecUnOpLocations()
218 void LocationsBuilderARM64::VisitVecReduce(HVecReduce* instruction) { in VisitVecReduce()
222 void InstructionCodeGeneratorARM64::VisitVecReduce(HVecReduce* instruction) { in VisitVecReduce()
258 void LocationsBuilderARM64::VisitVecCnv(HVecCnv* instruction) { in VisitVecCnv()
262 void InstructionCodeGeneratorARM64::VisitVecCnv(HVecCnv* instruction) { in VisitVecCnv()
276 void LocationsBuilderARM64::VisitVecNeg(HVecNeg* instruction) { in VisitVecNeg()
[all …]
Dinstruction_simplifier_arm.cc62 HInstruction* instruction = it.Current(); in VisitBasicBlock() local
187 void InstructionSimplifierArmVisitor::VisitAnd(HAnd* instruction) { in VisitAnd()
193 void InstructionSimplifierArmVisitor::VisitArrayGet(HArrayGet* instruction) { in VisitArrayGet()
226 void InstructionSimplifierArmVisitor::VisitArraySet(HArraySet* instruction) { in VisitArraySet()
247 void InstructionSimplifierArmVisitor::VisitMul(HMul* instruction) { in VisitMul()
253 void InstructionSimplifierArmVisitor::VisitOr(HOr* instruction) { in VisitOr()
259 void InstructionSimplifierArmVisitor::VisitShl(HShl* instruction) { in VisitShl()
265 void InstructionSimplifierArmVisitor::VisitShr(HShr* instruction) { in VisitShr()
271 void InstructionSimplifierArmVisitor::VisitTypeConversion(HTypeConversion* instruction) { in VisitTypeConversion()
285 void InstructionSimplifierArmVisitor::VisitUShr(HUShr* instruction) { in VisitUShr()
Dload_store_elimination.cc120 HTypeConversion* AddTypeConversionIfNecessary(HInstruction* instruction, in AddTypeConversionIfNecessary()
136 HInstruction* FindSubstitute(HInstruction* instruction) { in FindSubstitute()
259 static bool IsLoad(const HInstruction* instruction) { in IsLoad()
270 static bool IsStore(const HInstruction* instruction) { in IsStore()
527 void TryRemovingNullCheck(HInstruction* instruction) { in TryRemovingNullCheck()
558 void VisitGetLocation(HInstruction* instruction, size_t idx) { in VisitGetLocation()
635 void VisitSetLocation(HInstruction* instruction, size_t idx, HInstruction* value) { in VisitSetLocation()
694 void VisitInstanceFieldGet(HInstanceFieldGet* instruction) override { in VisitInstanceFieldGet()
700 void VisitInstanceFieldSet(HInstanceFieldSet* instruction) override { in VisitInstanceFieldSet()
708 void VisitStaticFieldGet(HStaticFieldGet* instruction) override { in VisitStaticFieldGet()
[all …]
Dscheduler_arm.cc540 void SchedulingLatencyVisitorARM::VisitBitwiseNegatedRight(HBitwiseNegatedRight* instruction) { in VisitBitwiseNegatedRight()
557 void SchedulingLatencyVisitorARM::HandleGenerateDataProc(HDataProcWithShifterOp* instruction) { in HandleGenerateDataProc()
571 void SchedulingLatencyVisitorARM::HandleGenerateLongDataProc(HDataProcWithShifterOp* instruction) { in HandleGenerateLongDataProc()
598 void SchedulingLatencyVisitorARM::VisitDataProcWithShifterOp(HDataProcWithShifterOp* instruction) { in VisitDataProcWithShifterOp()
629 void SchedulingLatencyVisitorARM::VisitArrayGet(HArrayGet* instruction) { in VisitArrayGet()
724 void SchedulingLatencyVisitorARM::VisitArrayLength(HArrayLength* instruction) { in VisitArrayLength()
732 void SchedulingLatencyVisitorARM::VisitArraySet(HArraySet* instruction) { in VisitArraySet()
830 void SchedulingLatencyVisitorARM::VisitDiv(HDiv* instruction) { in VisitDiv()
856 void SchedulingLatencyVisitorARM::VisitInstanceFieldGet(HInstanceFieldGet* instruction) { in VisitInstanceFieldGet()
860 void SchedulingLatencyVisitorARM::VisitInstanceFieldSet(HInstanceFieldSet* instruction) { in VisitInstanceFieldSet()
[all …]
Dscheduler.cc103 static bool IsArrayAccess(const HInstruction* instruction) { in IsArrayAccess()
107 static bool IsInstanceFieldAccess(const HInstruction* instruction) { in IsInstanceFieldAccess()
114 static bool IsStaticFieldAccess(const HInstruction* instruction) { in IsStaticFieldAccess()
121 static bool IsResolvedFieldAccess(const HInstruction* instruction) { in IsResolvedFieldAccess()
128 static bool IsUnresolvedFieldAccess(const HInstruction* instruction) { in IsUnresolvedFieldAccess()
135 static bool IsFieldAccess(const HInstruction* instruction) { in IsFieldAccess()
139 static const FieldInfo* GetFieldInfo(const HInstruction* instruction) { in GetFieldInfo()
317 HInstruction* instruction = instruction_node->GetInstruction(); in AddDependencies() local
413 static const std::string InstructionTypeId(const HInstruction* instruction) { in InstructionTypeId()
420 const HInstruction* instruction = node->GetInstruction(); in DumpAsDotNode() local
[all …]
Dconstructor_fence_redundancy_elimination.cc66 void VisitInstanceFieldSet(HInstanceFieldSet* instruction) override { in VisitInstanceFieldSet()
71 void VisitStaticFieldSet(HStaticFieldSet* instruction) override { in VisitStaticFieldSet()
76 void VisitArraySet(HArraySet* instruction) override { in VisitArraySet()
110 void VisitUnresolvedInstanceFieldGet(HUnresolvedInstanceFieldGet* instruction) override { in VisitUnresolvedInstanceFieldGet()
115 void VisitUnresolvedInstanceFieldSet(HUnresolvedInstanceFieldSet* instruction) override { in VisitUnresolvedInstanceFieldSet()
120 void VisitUnresolvedStaticFieldGet(HUnresolvedStaticFieldGet* instruction) override { in VisitUnresolvedStaticFieldGet()
125 void VisitUnresolvedStaticFieldSet(HUnresolvedStaticFieldSet* instruction) override { in VisitUnresolvedStaticFieldSet()
Dinstruction_simplifier_x86.cc43 HInstruction* instruction = it.Current(); in VisitBasicBlock() local
59 void InstructionSimplifierX86Visitor::VisitAnd(HAnd* instruction) { in VisitAnd()
69 void InstructionSimplifierX86Visitor::VisitXor(HXor* instruction) { in VisitXor()
Dinstruction_simplifier_x86_64.cc43 HInstruction* instruction = it.Current(); in VisitBasicBlock() local
58 void InstructionSimplifierX86_64Visitor::VisitAnd(HAnd* instruction) { in VisitAnd()
67 void InstructionSimplifierX86_64Visitor::VisitXor(HXor* instruction) { in VisitXor()
Dcode_sinking.cc46 static bool IsInterestingInstruction(HInstruction* instruction) { in IsInterestingInstruction()
122 static void AddInstruction(HInstruction* instruction, in AddInstruction()
135 static void AddInputs(HInstruction* instruction, in AddInputs()
156 static bool ShouldFilterUse(HInstruction* instruction, in ShouldFilterUse()
177 static HInstruction* FindIdealPosition(HInstruction* instruction, in FindIdealPosition()
315 HInstruction* instruction = worklist.back(); in SinkCodeToUncommonBranch() local
Dgraph_checker.cc38 static bool IsAllowedToJumpToExitBlock(HInstruction* instruction) { in IsAllowedToJumpToExitBlock()
358 void GraphChecker::VisitInstruction(HInstruction* instruction) { in VisitInstruction()
655 void GraphChecker::VisitInstanceOf(HInstanceOf* instruction) { in VisitInstanceOf()
950 void GraphChecker::HandleBooleanInput(HInstruction* instruction, size_t input_index) { in HandleBooleanInput()
974 void GraphChecker::VisitPackedSwitch(HPackedSwitch* instruction) { in VisitPackedSwitch()
990 void GraphChecker::VisitIf(HIf* instruction) { in VisitIf()
995 void GraphChecker::VisitSelect(HSelect* instruction) { in VisitSelect()
1000 void GraphChecker::VisitBooleanNot(HBooleanNot* instruction) { in VisitBooleanNot()
1035 void GraphChecker::VisitNeg(HNeg* instruction) { in VisitNeg()
1107 void GraphChecker::VisitConstant(HConstant* instruction) { in VisitConstant()
[all …]
Dload_store_analysis.h254 size_t GetArrayHeapLocation(HInstruction* instruction) const { in GetArrayHeapLocation()
431 ReferenceInfo* GetOrCreateReferenceInfo(HInstruction* instruction) { in GetOrCreateReferenceInfo()
441 void CreateReferenceInfoForReferenceType(HInstruction* instruction) { in CreateReferenceInfoForReferenceType()
495 void VisitInstanceFieldGet(HInstanceFieldGet* instruction) override { in VisitInstanceFieldGet()
500 void VisitInstanceFieldSet(HInstanceFieldSet* instruction) override { in VisitInstanceFieldSet()
526 void VisitStaticFieldGet(HStaticFieldGet* instruction) override { in VisitStaticFieldGet()
531 void VisitStaticFieldSet(HStaticFieldSet* instruction) override { in VisitStaticFieldSet()
539 void VisitArrayGet(HArrayGet* instruction) override { in VisitArrayGet()
547 void VisitArraySet(HArraySet* instruction) override { in VisitArraySet()
555 void VisitVecLoad(HVecLoad* instruction) override { in VisitVecLoad()
[all …]
Dpretty_printer.h30 void PrintPreInstruction(HInstruction* instruction) { in PrintPreInstruction()
36 void VisitInstruction(HInstruction* instruction) override { in VisitInstruction()
42 void PrintPostInstruction(HInstruction* instruction) { in PrintPostInstruction()
Dlicm.cc23 static bool IsPhiOf(HInstruction* instruction, HBasicBlock* block) { in IsPhiOf()
31 static bool InputsAreDefinedBeforeLoop(HInstruction* instruction) { in InputsAreDefinedBeforeLoop()
132 HInstruction* instruction = inst_it.Current(); in Run() local
Dcode_generator_arm64.cc249 explicit BoundsCheckSlowPathARM64(HBoundsCheck* instruction) : SlowPathCodeARM64(instruction) {} in BoundsCheckSlowPathARM64()
287 explicit DivZeroCheckSlowPathARM64(HDivZeroCheck* instruction) : SlowPathCodeARM64(instruction) {} in DivZeroCheckSlowPathARM64()
364 explicit LoadStringSlowPathARM64(HLoadString* instruction) in LoadStringSlowPathARM64()
422 SuspendCheckSlowPathARM64(HSuspendCheck* instruction, HBasicBlock* successor) in SuspendCheckSlowPathARM64()
463 TypeCheckSlowPathARM64(HInstruction* instruction, bool is_fatal) in TypeCheckSlowPathARM64()
518 explicit DeoptimizationSlowPathARM64(HDeoptimize* instruction) in DeoptimizationSlowPathARM64()
541 explicit ArraySetSlowPathARM64(HInstruction* instruction) : SlowPathCodeARM64(instruction) {} in ArraySetSlowPathARM64()
606 ReadBarrierForHeapReferenceSlowPathARM64(HInstruction* instruction, in ReadBarrierForHeapReferenceSlowPathARM64()
793 ReadBarrierForRootSlowPathARM64(HInstruction* instruction, Location out, Location root) in ReadBarrierForRootSlowPathARM64()
1584 void CodeGeneratorARM64::LoadAcquire(HInstruction* instruction, in LoadAcquire()
[all …]
Dinstruction_simplifier_x86_shared.cc21 bool TryCombineAndNot(HAnd* instruction) { in TryCombineAndNot()
57 bool TryGenerateResetLeastSetBit(HAnd* instruction) { in TryGenerateResetLeastSetBit()
90 bool TryGenerateMaskUptoLeastSetBit(HXor* instruction) { in TryGenerateMaskUptoLeastSetBit()
Dregister_allocation_resolver.cc59 HInstruction* instruction = liveness_.GetInstructionFromSsaIndex(i); in Resolve() local
147 HInstruction* instruction = liveness_.GetInstructionFromSsaIndex(i); in Resolve() local
234 HInstruction* instruction = liveness_.GetInstructionFromSsaIndex(i); in UpdateSafepointLiveRegisters() local
412 HInstruction* instruction) { in IsMaterializableEntryBlockInstructionOfGraphWithIrreducibleLoop()
512 HInstruction* instruction, in AddMove()
557 HInstruction* instruction, in InsertParallelMoveAt()
629 HInstruction* instruction, in InsertParallelMoveAtExitOf()
659 HInstruction* instruction, in InsertParallelMoveAtEntryOf()
678 void RegisterAllocationResolver::InsertMoveAfter(HInstruction* instruction, in InsertMoveAfter()
Dinstruction_simplifier.cc336 void InstructionSimplifierVisitor::VisitShift(HBinaryOperation* instruction) { in VisitShift()
651 void InstructionSimplifierVisitor::VisitInstanceOf(HInstanceOf* instruction) { in VisitInstanceOf()
702 void InstructionSimplifierVisitor::VisitInstanceFieldSet(HInstanceFieldSet* instruction) { in VisitInstanceFieldSet()
709 void InstructionSimplifierVisitor::VisitStaticFieldSet(HStaticFieldSet* instruction) { in VisitStaticFieldSet()
1011 void InstructionSimplifierVisitor::VisitIf(HIf* instruction) { in VisitIf()
1021 void InstructionSimplifierVisitor::VisitArrayLength(HArrayLength* instruction) { in VisitArrayLength()
1033 void InstructionSimplifierVisitor::VisitArraySet(HArraySet* instruction) { in VisitArraySet()
1132 HInstruction* instruction = use.GetUser(); in IsTypeConversionForStoringIntoNoWiderFieldOnly() local
1158 void InstructionSimplifierVisitor::VisitTypeConversion(HTypeConversion* instruction) { in VisitTypeConversion()
1254 void InstructionSimplifierVisitor::VisitAbs(HAbs* instruction) { in VisitAbs()
[all …]
Dgraph_visualizer.cc338 void VisitParallelMove(HParallelMove* instruction) override { in VisitParallelMove()
351 void VisitIntConstant(HIntConstant* instruction) override { in VisitIntConstant()
355 void VisitLongConstant(HLongConstant* instruction) override { in VisitLongConstant()
359 void VisitFloatConstant(HFloatConstant* instruction) override { in VisitFloatConstant()
363 void VisitDoubleConstant(HDoubleConstant* instruction) override { in VisitDoubleConstant()
564 void VisitVecMultiplyAccumulate(HVecMultiplyAccumulate* instruction) override { in VisitVecMultiplyAccumulate()
569 void VisitVecDotProd(HVecDotProd* instruction) override { in VisitVecDotProd()
578 void VisitMultiplyAccumulate(HMultiplyAccumulate* instruction) override { in VisitMultiplyAccumulate()
582 void VisitBitwiseNegatedRight(HBitwiseNegatedRight* instruction) override { in VisitBitwiseNegatedRight()
586 void VisitDataProcWithShifterOp(HDataProcWithShifterOp* instruction) override { in VisitDataProcWithShifterOp()
[all …]
Dbounds_check_elimination.cc37 ValueBound(HInstruction* instruction, int32_t constant) { in ValueBound()
68 static bool IsAddOrSubAConstant(HInstruction* instruction, in IsAddOrSubAConstant()
96 static ValueBound AsValueBound(HInstruction* instruction) { in AsValueBound()
110 static ValueBound DetectValueBoundFromValue(HInstruction* instruction, /* out */ bool* found) { in DetectValueBoundFromValue()
539 for (HInstruction* instruction = block->GetFirstPhi(); instruction != nullptr;) { in VisitBasicBlock() local
545 for (HInstruction* instruction = block->GetFirstInstruction(); instruction != nullptr;) { in VisitBasicBlock() local
580 ValueRange* LookupValueRange(HInstruction* instruction, HBasicBlock* basic_block) { in LookupValueRange()
597 void AssignRange(HBasicBlock* basic_block, HInstruction* instruction, ValueRange* range) { in AssignRange()
604 void ApplyRangeFromComparison(HInstruction* instruction, HBasicBlock* basic_block, in ApplyRangeFromComparison()
626 void HandleIfBetweenTwoMonotonicValueRanges(HIf* instruction, in HandleIfBetweenTwoMonotonicValueRanges()
[all …]

1234