Lines Matching refs:buffer

26 size_t EmitSection(SectionCode code, ZoneBuffer* buffer) {
28 buffer->write_u8(code);
31 return buffer->reserve_u32v();
35 void FixupSection(ZoneBuffer* buffer, size_t start) {
36 buffer->patch_u32v(start, static_cast<uint32_t>(buffer->offset() - start -
131 void WriteValueType(ZoneBuffer* buffer, const ValueType& type) {
132 buffer->write_u8(type.value_type_code());
134 buffer->write_i32v(type.heap_type().code());
137 buffer->write_u32v(type.ref_index());
224 void WasmFunctionBuilder::WriteSignature(ZoneBuffer* buffer) const {
225 buffer->write_u32v(signature_index_);
228 void WasmFunctionBuilder::WriteBody(ZoneBuffer* buffer) const {
230 buffer->write_size(locals_size + body_.size());
231 buffer->EnsureSpace(locals_size);
232 byte** ptr = buffer->pos_ptr();
236 size_t base = buffer->offset();
237 buffer->write(body_.begin(), body_.size());
239 buffer->patch_u32v(
247 void WasmFunctionBuilder::WriteAsmWasmOffsetTable(ZoneBuffer* buffer) const {
249 buffer->write_size(0);
255 buffer->write_size(asm_offsets_.size() + locals_enc_size + func_start_size);
258 buffer->write_u32v(static_cast<uint32_t>(locals_.Size()));
260 buffer->write_u32v(asm_func_start_source_position_);
261 buffer->write(asm_offsets_.begin(), asm_offsets_.size());
451 void WriteInitializerExpressionWithEnd(ZoneBuffer* buffer,
456 buffer->write_u8(kExprI32Const);
457 buffer->write_i32v(init.immediate().i32_const);
460 buffer->write_u8(kExprI64Const);
461 buffer->write_i64v(init.immediate().i64_const);
464 buffer->write_u8(kExprF32Const);
465 buffer->write_f32(init.immediate().f32_const);
468 buffer->write_u8(kExprF64Const);
469 buffer->write_f64(init.immediate().f64_const);
472 buffer->write_u8(kSimdPrefix);
473 buffer->write_u8(kExprS128Const & 0xFF);
474 buffer->write(init.immediate().s128_const.data(), kSimd128Size);
477 buffer->write_u8(kExprGlobalGet);
478 buffer->write_u32v(init.immediate().index);
481 buffer->write_u8(kExprRefNull);
482 buffer->write_i32v(HeapType(init.immediate().heap_type).code());
485 buffer->write_u8(kExprRefFunc);
486 buffer->write_u32v(init.immediate().index);
492 buffer->write_u8(kExprI32Const);
494 buffer->write_u8(0);
497 buffer->write_u8(kExprI64Const);
499 buffer->write_u8(0);
502 buffer->write_u8(kExprF32Const);
503 buffer->write_f32(0.f);
506 buffer->write_u8(kExprF64Const);
507 buffer->write_f64(0.);
510 buffer->write_u8(kExprRefNull);
511 buffer->write_i32v(type.heap_type().code());
514 buffer->write_u8(static_cast<byte>(kSimdPrefix));
515 buffer->write_u8(static_cast<byte>(kExprS128Const & 0xff));
516 for (int i = 0; i < kSimd128Size; i++) buffer->write_u8(0);
537 WriteInitializerExpressionWithEnd(buffer, operand, kWasmBottom);
539 buffer->write_u8(kGCPrefix);
557 buffer->write_u8(static_cast<uint8_t>(opcode));
558 buffer->write_u32v(init.immediate().index);
565 WriteInitializerExpressionWithEnd(buffer, operand, kWasmBottom);
567 buffer->write_u8(kGCPrefix);
568 buffer->write_u8(static_cast<uint8_t>(
571 buffer->write_u32v(init.immediate().index);
572 buffer->write_u32v(static_cast<uint32_t>(init.operands()->size() - 1));
576 buffer->write_u8(kGCPrefix);
577 buffer->write_u8(static_cast<uint8_t>(kExprRttCanon));
578 buffer->write_i32v(static_cast<int32_t>(init.immediate().index));
583 void WriteInitializerExpression(ZoneBuffer* buffer, const WasmInitExpr& init,
585 WriteInitializerExpressionWithEnd(buffer, init, type);
586 buffer->write_u8(kExprEnd);
590 void WasmModuleBuilder::WriteTo(ZoneBuffer* buffer) const {
592 buffer->write_u32(kWasmMagic);
593 buffer->write_u32(kWasmVersion);
597 size_t start = EmitSection(kTypeSectionCode, buffer);
604 buffer->write_size(type_count);
610 buffer->write_u8(kWasmRecursiveTypeGroupCode);
611 buffer->write_u32v(recursive_group->second);
617 buffer->write_u8(kWasmSubtypeCode);
618 buffer->write_u8(1); // The supertype count is always 1.
619 buffer->write_u32v(type.supertype);
624 buffer->write_u8(kWasmFunctionTypeCode);
625 buffer->write_size(sig->parameter_count());
627 WriteValueType(buffer, param);
629 buffer->write_size(sig->return_count());
631 WriteValueType(buffer, ret);
637 buffer->write_u8(kWasmStructTypeCode);
638 buffer->write_size(struct_type->field_count());
640 WriteValueType(buffer, struct_type->field(i));
641 buffer->write_u8(struct_type->mutability(i) ? 1 : 0);
647 buffer->write_u8(kWasmArrayTypeCode);
648 WriteValueType(buffer, array_type->element_type());
649 buffer->write_u8(array_type->mutability() ? 1 : 0);
654 FixupSection(buffer, start);
659 size_t start = EmitSection(kImportSectionCode, buffer);
660 buffer->write_size(global_imports_.size() + function_imports_.size());
662 buffer->write_string(import.module); // module name
663 buffer->write_string(import.name); // field name
664 buffer->write_u8(kExternalGlobal);
665 buffer->write_u8(import.type_code);
666 buffer->write_u8(import.mutability ? 1 : 0);
669 buffer->write_string(import.module); // module name
670 buffer->write_string(import.name); // field name
671 buffer->write_u8(kExternalFunction);
672 buffer->write_u32v(import.sig_index);
674 FixupSection(buffer, start);
680 size_t start = EmitSection(kFunctionSectionCode, buffer);
681 buffer->write_size(functions_.size());
683 function->WriteSignature(buffer);
686 FixupSection(buffer, start);
691 size_t start = EmitSection(kTableSectionCode, buffer);
692 buffer->write_size(tables_.size());
694 WriteValueType(buffer, table.type);
695 buffer->write_u8(table.has_maximum ? kWithMaximum : kNoMaximum);
696 buffer->write_size(table.min_size);
697 if (table.has_maximum) buffer->write_size(table.max_size);
699 WriteInitializerExpression(buffer, table.init, table.type);
702 FixupSection(buffer, start);
707 size_t start = EmitSection(kMemorySectionCode, buffer);
708 buffer->write_u8(1); // memory count
710 buffer->write_u8(has_max_memory_size_ ? kSharedWithMaximum
713 buffer->write_u8(has_max_memory_size_ ? kWithMaximum : kNoMaximum);
715 buffer->write_u32v(min_memory_size_);
717 buffer->write_u32v(max_memory_size_);
719 FixupSection(buffer, start);
724 size_t start = EmitSection(kTagSectionCode, buffer);
725 buffer->write_size(exceptions_.size());
727 buffer->write_u32v(kExceptionAttribute);
728 buffer->write_u32v(type);
730 FixupSection(buffer, start);
735 size_t start = EmitSection(kGlobalSectionCode, buffer);
736 buffer->write_size(globals_.size());
739 WriteValueType(buffer, global.type);
740 buffer->write_u8(global.mutability ? 1 : 0);
741 WriteInitializerExpression(buffer, global.init, global.type);
743 FixupSection(buffer, start);
748 size_t start = EmitSection(kExportSectionCode, buffer);
749 buffer->write_size(exports_.size());
751 buffer->write_string(ex.name);
752 buffer->write_u8(ex.kind);
755 buffer->write_size(ex.index + function_imports_.size());
758 buffer->write_size(ex.index + global_imports_.size());
764 buffer->write_size(ex.index);
770 FixupSection(buffer, start);
775 size_t start = EmitSection(kStartSectionCode, buffer);
776 buffer->write_size(start_function_index_ + function_imports_.size());
777 FixupSection(buffer, start);
782 size_t start = EmitSection(kElementSectionCode, buffer);
783 buffer->write_size(element_segments_.size());
795 buffer->write_u8(kind_mask | expressions_as_elements_mask);
797 buffer->write_u32v(segment.table_index);
798 WriteInitializerExpression(buffer, segment.offset, segment.type);
800 WriteValueType(buffer, segment.type);
801 buffer->write_size(segment.entries.size());
817 buffer->write_u8(opcode);
818 buffer->write_u32v(index);
819 buffer->write_u8(kExprEnd);
822 FixupSection(buffer, start);
835 buffer->write_u8(kUnknownSectionCode);
837 size_t start = buffer->reserve_u32v();
839 buffer->write_string(base::CStrVector("compilationHints"));
841 buffer->write_size(functions_.size());
846 buffer->write_u8(hint_byte);
848 FixupSection(buffer, start);
853 size_t start = EmitSection(kCodeSectionCode, buffer);
854 buffer->write_size(functions_.size());
856 function->WriteBody(buffer);
858 FixupSection(buffer, start);
863 size_t start = EmitSection(kDataSectionCode, buffer);
864 buffer->write_size(data_segments_.size());
867 buffer->write_u8(0); // linear memory segment
868 buffer->write_u8(kExprI32Const); // initializer expression for dest
869 buffer->write_u32v(segment.dest);
870 buffer->write_u8(kExprEnd);
871 buffer->write_u32v(static_cast<uint32_t>(segment.data.size()));
872 buffer->write(&segment.data[0], segment.data.size());
874 FixupSection(buffer, start);
880 buffer->write_u8(kUnknownSectionCode);
882 size_t start = buffer->reserve_u32v();
884 buffer->write_string(base::CStrVector("name"));
886 buffer->write_u8(NameSectionKindCode::kFunctionCode);
888 size_t functions_start = buffer->reserve_u32v();
892 buffer->write_size(num_imports + num_function_names);
897 buffer->write_u32v(function_index);
898 buffer->write_string(import->name);
905 buffer->write_u32v(function_index);
906 buffer->write_string(function->name_);
911 FixupSection(buffer, functions_start);
912 FixupSection(buffer, start);
916 void WasmModuleBuilder::WriteAsmJsOffsetTable(ZoneBuffer* buffer) const {
918 buffer->write_size(functions_.size());
921 function->WriteAsmWasmOffsetTable(buffer);