Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/interface-descriptors.h

Issue 2777203007: [builtins] Introduce new TFC macro and auto-generate TFS descriptors (Closed)
Patch Set: Rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ia32/interface-descriptors-ia32.cc ('k') | src/interface-descriptors.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_ 5 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_
6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ 6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_
7 7
8 #include <memory> 8 #include <memory>
9 9
10 #include "src/assembler.h" 10 #include "src/assembler.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 V(CreateWeakCell) \ 43 V(CreateWeakCell) \
44 V(CallFunction) \ 44 V(CallFunction) \
45 V(CallIC) \ 45 V(CallIC) \
46 V(CallICTrampoline) \ 46 V(CallICTrampoline) \
47 V(CallForwardVarargs) \ 47 V(CallForwardVarargs) \
48 V(CallConstruct) \ 48 V(CallConstruct) \
49 V(CallTrampoline) \ 49 V(CallTrampoline) \
50 V(ConstructStub) \ 50 V(ConstructStub) \
51 V(ConstructTrampoline) \ 51 V(ConstructTrampoline) \
52 V(RegExpExec) \ 52 V(RegExpExec) \
53 V(RegExpPrototypeExecSlow) \
54 V(RegExpReplace) \
55 V(RegExpSplit) \
56 V(CopyFastSmiOrObjectElements) \
57 V(TransitionElementsKind) \ 53 V(TransitionElementsKind) \
58 V(AllocateHeapNumber) \ 54 V(AllocateHeapNumber) \
59 V(Builtin) \ 55 V(Builtin) \
60 V(ArrayConstructor) \ 56 V(ArrayConstructor) \
61 V(IteratingArrayBuiltin) \ 57 V(IteratingArrayBuiltin) \
62 V(IteratingArrayBuiltinLoopContinuation) \ 58 V(IteratingArrayBuiltinLoopContinuation) \
63 V(ArrayNoArgumentConstructor) \ 59 V(ArrayNoArgumentConstructor) \
64 V(ArraySingleArgumentConstructor) \ 60 V(ArraySingleArgumentConstructor) \
65 V(ArrayNArgumentsConstructor) \ 61 V(ArrayNArgumentsConstructor) \
66 V(Compare) \ 62 V(Compare) \
67 V(BinaryOp) \ 63 V(BinaryOp) \
68 V(BinaryOpWithAllocationSite) \ 64 V(BinaryOpWithAllocationSite) \
69 V(BinaryOpWithVector) \ 65 V(BinaryOpWithVector) \
70 V(CountOp) \ 66 V(CountOp) \
71 V(StringAdd) \ 67 V(StringAdd) \
72 V(StringCharAt) \ 68 V(StringCharAt) \
73 V(StringCharCodeAt) \ 69 V(StringCharCodeAt) \
74 V(StringCompare) \ 70 V(StringCompare) \
75 V(StringIndexOf) \
76 V(SubString) \ 71 V(SubString) \
77 V(Keyed) \
78 V(Named) \
79 V(CreateIterResultObject) \
80 V(HasProperty) \
81 V(ForInFilter) \
82 V(ForInNext) \
83 V(ForInPrepare) \ 72 V(ForInPrepare) \
84 V(GetProperty) \ 73 V(GetProperty) \
85 V(CallHandler) \
86 V(ArgumentAdaptor) \ 74 V(ArgumentAdaptor) \
87 V(ApiCallback) \ 75 V(ApiCallback) \
88 V(ApiGetter) \ 76 V(ApiGetter) \
89 V(MathPowTagged) \ 77 V(MathPowTagged) \
90 V(MathPowInteger) \ 78 V(MathPowInteger) \
91 V(GrowArrayElements) \ 79 V(GrowArrayElements) \
92 V(NewArgumentsElements) \ 80 V(NewArgumentsElements) \
93 V(InterpreterDispatch) \ 81 V(InterpreterDispatch) \
94 V(InterpreterPushArgsAndCall) \ 82 V(InterpreterPushArgsAndCall) \
95 V(InterpreterPushArgsAndConstruct) \ 83 V(InterpreterPushArgsAndConstruct) \
96 V(InterpreterPushArgsAndConstructArray) \ 84 V(InterpreterPushArgsAndConstructArray) \
97 V(InterpreterCEntry) \ 85 V(InterpreterCEntry) \
98 V(ResumeGenerator) \ 86 V(ResumeGenerator) \
99 V(FrameDropperTrampoline) \ 87 V(FrameDropperTrampoline) \
100 V(PromiseHandleReject) \
101 V(AsyncGeneratorResolve) \
102 V(AsyncGeneratorReject) \
103 V(AsyncGeneratorResumeNext) \
104 V(WasmRuntimeCall) \ 88 V(WasmRuntimeCall) \
105 V(ResolveNativePromise) \ 89 BUILTIN_LIST_TFS(V)
106 V(RejectNativePromise) \
107 V(PerformNativePromiseThen)
108 90
109 class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { 91 class V8_EXPORT_PRIVATE CallInterfaceDescriptorData {
110 public: 92 public:
111 CallInterfaceDescriptorData() : register_param_count_(-1), param_count_(-1) {} 93 CallInterfaceDescriptorData() : register_param_count_(-1), param_count_(-1) {}
112 94
113 // A copy of the passed in registers and param_representations is made 95 // A copy of the passed in registers and param_representations is made
114 // and owned by the CallInterfaceDescriptorData. 96 // and owned by the CallInterfaceDescriptorData.
115 97
116 void InitializePlatformSpecific( 98 void InitializePlatformSpecific(
117 int register_parameter_count, const Register* registers, 99 int register_parameter_count, const Register* registers,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 137
156 PlatformInterfaceDescriptor* platform_specific_descriptor_; 138 PlatformInterfaceDescriptor* platform_specific_descriptor_;
157 139
158 DISALLOW_COPY_AND_ASSIGN(CallInterfaceDescriptorData); 140 DISALLOW_COPY_AND_ASSIGN(CallInterfaceDescriptorData);
159 }; 141 };
160 142
161 143
162 class CallDescriptors { 144 class CallDescriptors {
163 public: 145 public:
164 enum Key { 146 enum Key {
165 #define DEF_ENUM(name) name, 147 #define DEF_ENUM(name, ...) name,
166 INTERFACE_DESCRIPTOR_LIST(DEF_ENUM) 148 INTERFACE_DESCRIPTOR_LIST(DEF_ENUM)
167 #undef DEF_ENUM 149 #undef DEF_ENUM
168 NUMBER_OF_DESCRIPTORS 150 NUMBER_OF_DESCRIPTORS
169 }; 151 };
170 }; 152 };
171 153
172 class V8_EXPORT_PRIVATE CallInterfaceDescriptor { 154 class V8_EXPORT_PRIVATE CallInterfaceDescriptor {
173 public: 155 public:
174 CallInterfaceDescriptor() : data_(NULL) {} 156 CallInterfaceDescriptor() : data_(NULL) {}
175 virtual ~CallInterfaceDescriptor() {} 157 virtual ~CallInterfaceDescriptor() {}
176 158
177 CallInterfaceDescriptor(Isolate* isolate, CallDescriptors::Key key) 159 CallInterfaceDescriptor(Isolate* isolate, CallDescriptors::Key key)
178 : data_(isolate->call_descriptor_data(key)) {} 160 : data_(isolate->call_descriptor_data(key)) {}
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 }; 491 };
510 492
511 class TypeConversionDescriptor final : public CallInterfaceDescriptor { 493 class TypeConversionDescriptor final : public CallInterfaceDescriptor {
512 public: 494 public:
513 DEFINE_PARAMETERS(kArgument) 495 DEFINE_PARAMETERS(kArgument)
514 DECLARE_DESCRIPTOR(TypeConversionDescriptor, CallInterfaceDescriptor) 496 DECLARE_DESCRIPTOR(TypeConversionDescriptor, CallInterfaceDescriptor)
515 497
516 static const Register ArgumentRegister(); 498 static const Register ArgumentRegister();
517 }; 499 };
518 500
519 class CreateIterResultObjectDescriptor final : public CallInterfaceDescriptor {
520 public:
521 DEFINE_PARAMETERS(kValue, kDone)
522 DECLARE_DEFAULT_DESCRIPTOR(CreateIterResultObjectDescriptor,
523 CallInterfaceDescriptor, kParameterCount)
524 };
525
526 class HasPropertyDescriptor final : public CallInterfaceDescriptor {
527 public:
528 DEFINE_PARAMETERS(kKey, kObject)
529 DECLARE_DEFAULT_DESCRIPTOR(HasPropertyDescriptor, CallInterfaceDescriptor,
530 kParameterCount)
531 };
532
533 class ForInFilterDescriptor final : public CallInterfaceDescriptor {
534 public:
535 DEFINE_PARAMETERS(kKey, kObject)
536 DECLARE_DEFAULT_DESCRIPTOR(ForInFilterDescriptor, CallInterfaceDescriptor,
537 kParameterCount)
538 };
539
540 class ForInNextDescriptor final : public CallInterfaceDescriptor {
541 public:
542 DEFINE_PARAMETERS(kObject, kCacheArray, kCacheType, kIndex)
543 DECLARE_DEFAULT_DESCRIPTOR(ForInNextDescriptor, CallInterfaceDescriptor,
544 kParameterCount)
545 };
546
547 class ForInPrepareDescriptor final : public CallInterfaceDescriptor { 501 class ForInPrepareDescriptor final : public CallInterfaceDescriptor {
548 public: 502 public:
549 DEFINE_PARAMETERS(kObject) 503 DEFINE_PARAMETERS(kObject)
550 DECLARE_DEFAULT_DESCRIPTOR(ForInPrepareDescriptor, CallInterfaceDescriptor, 504 DECLARE_DEFAULT_DESCRIPTOR(ForInPrepareDescriptor, CallInterfaceDescriptor,
551 kParameterCount) 505 kParameterCount)
552 }; 506 };
553 507
554 class GetPropertyDescriptor final : public CallInterfaceDescriptor { 508 class GetPropertyDescriptor final : public CallInterfaceDescriptor {
555 public: 509 public:
556 DEFINE_PARAMETERS(kObject, kKey) 510 DEFINE_PARAMETERS(kObject, kKey)
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(RegExpExecDescriptor, 619 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(RegExpExecDescriptor,
666 CallInterfaceDescriptor) 620 CallInterfaceDescriptor)
667 621
668 static const Register StringRegister(); 622 static const Register StringRegister();
669 static const Register LastIndexRegister(); 623 static const Register LastIndexRegister();
670 static const Register StringStartRegister(); 624 static const Register StringStartRegister();
671 static const Register StringEndRegister(); 625 static const Register StringEndRegister();
672 static const Register CodeRegister(); 626 static const Register CodeRegister();
673 }; 627 };
674 628
675 class RegExpPrototypeExecSlowDescriptor : public CallInterfaceDescriptor {
676 public:
677 DEFINE_PARAMETERS(kReceiver, kString)
678 DECLARE_DEFAULT_DESCRIPTOR(RegExpPrototypeExecSlowDescriptor,
679 CallInterfaceDescriptor, kParameterCount)
680 };
681
682 class RegExpReplaceDescriptor : public CallInterfaceDescriptor {
683 public:
684 DEFINE_PARAMETERS(kReceiver, kString, kReplaceValue)
685 DECLARE_DEFAULT_DESCRIPTOR(RegExpReplaceDescriptor, CallInterfaceDescriptor,
686 kParameterCount)
687 };
688
689 class RegExpSplitDescriptor : public CallInterfaceDescriptor {
690 public:
691 DEFINE_PARAMETERS(kReceiver, kString, kLimit)
692 DECLARE_DEFAULT_DESCRIPTOR(RegExpSplitDescriptor, CallInterfaceDescriptor,
693 kParameterCount)
694 };
695
696 class CopyFastSmiOrObjectElementsDescriptor : public CallInterfaceDescriptor {
697 public:
698 DEFINE_PARAMETERS(kObject)
699 DECLARE_DEFAULT_DESCRIPTOR(CopyFastSmiOrObjectElementsDescriptor,
700 CallInterfaceDescriptor, kParameterCount)
701 };
702
703 class TransitionElementsKindDescriptor : public CallInterfaceDescriptor { 629 class TransitionElementsKindDescriptor : public CallInterfaceDescriptor {
704 public: 630 public:
705 DEFINE_PARAMETERS(kObject, kMap) 631 DEFINE_PARAMETERS(kObject, kMap)
706 DECLARE_DESCRIPTOR(TransitionElementsKindDescriptor, CallInterfaceDescriptor) 632 DECLARE_DESCRIPTOR(TransitionElementsKindDescriptor, CallInterfaceDescriptor)
707 }; 633 };
708 634
709 635
710 class AllocateHeapNumberDescriptor : public CallInterfaceDescriptor { 636 class AllocateHeapNumberDescriptor : public CallInterfaceDescriptor {
711 public: 637 public:
712 DEFINE_EMPTY_PARAMETERS() 638 DEFINE_EMPTY_PARAMETERS()
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 static const Register RightRegister(); 758 static const Register RightRegister();
833 }; 759 };
834 760
835 class SubStringDescriptor : public CallInterfaceDescriptor { 761 class SubStringDescriptor : public CallInterfaceDescriptor {
836 public: 762 public:
837 DEFINE_PARAMETERS(kString, kFrom, kTo) 763 DEFINE_PARAMETERS(kString, kFrom, kTo)
838 DECLARE_DESCRIPTOR_WITH_STACK_ARGS(SubStringDescriptor, 764 DECLARE_DESCRIPTOR_WITH_STACK_ARGS(SubStringDescriptor,
839 CallInterfaceDescriptor) 765 CallInterfaceDescriptor)
840 }; 766 };
841 767
842 class StringIndexOfDescriptor final : public CallInterfaceDescriptor {
843 public:
844 DEFINE_PARAMETERS(kReceiver, kSearchString, kPosition)
845 DECLARE_DEFAULT_DESCRIPTOR(StringIndexOfDescriptor, CallInterfaceDescriptor,
846 kParameterCount)
847 };
848
849 // TODO(ishell): not used, remove.
850 class KeyedDescriptor : public CallInterfaceDescriptor {
851 public:
852 DECLARE_DESCRIPTOR(KeyedDescriptor, CallInterfaceDescriptor)
853 };
854
855 // TODO(ishell): not used, remove
856 class NamedDescriptor : public CallInterfaceDescriptor {
857 public:
858 DECLARE_DESCRIPTOR(NamedDescriptor, CallInterfaceDescriptor)
859 };
860
861 // TODO(ishell): not used, remove.
862 class CallHandlerDescriptor : public CallInterfaceDescriptor {
863 public:
864 DECLARE_DESCRIPTOR(CallHandlerDescriptor, CallInterfaceDescriptor)
865 };
866
867
868 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { 768 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor {
869 public: 769 public:
870 DEFINE_PARAMETERS(kFunction, kNewTarget, kActualArgumentsCount, 770 DEFINE_PARAMETERS(kFunction, kNewTarget, kActualArgumentsCount,
871 kExpectedArgumentsCount) 771 kExpectedArgumentsCount)
872 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArgumentAdaptorDescriptor, 772 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArgumentAdaptorDescriptor,
873 CallInterfaceDescriptor) 773 CallInterfaceDescriptor)
874 }; 774 };
875 775
876 class ApiCallbackDescriptor : public CallInterfaceDescriptor { 776 class ApiCallbackDescriptor : public CallInterfaceDescriptor {
877 public: 777 public:
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 class ResumeGeneratorDescriptor final : public CallInterfaceDescriptor { 875 class ResumeGeneratorDescriptor final : public CallInterfaceDescriptor {
976 public: 876 public:
977 DECLARE_DESCRIPTOR(ResumeGeneratorDescriptor, CallInterfaceDescriptor) 877 DECLARE_DESCRIPTOR(ResumeGeneratorDescriptor, CallInterfaceDescriptor)
978 }; 878 };
979 879
980 class FrameDropperTrampolineDescriptor final : public CallInterfaceDescriptor { 880 class FrameDropperTrampolineDescriptor final : public CallInterfaceDescriptor {
981 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(FrameDropperTrampolineDescriptor, 881 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(FrameDropperTrampolineDescriptor,
982 CallInterfaceDescriptor) 882 CallInterfaceDescriptor)
983 }; 883 };
984 884
985 class PromiseHandleRejectDescriptor final : public CallInterfaceDescriptor {
986 public:
987 DEFINE_PARAMETERS(kPromise, kOnReject, kException)
988 DECLARE_DEFAULT_DESCRIPTOR(PromiseHandleRejectDescriptor,
989 CallInterfaceDescriptor, kParameterCount)
990 };
991
992 class AsyncGeneratorResolveDescriptor final : public CallInterfaceDescriptor {
993 public:
994 DEFINE_PARAMETERS(kGenerator, kValue, kDone)
995 DECLARE_DEFAULT_DESCRIPTOR(AsyncGeneratorResolveDescriptor,
996 CallInterfaceDescriptor, kParameterCount)
997 };
998
999 class AsyncGeneratorRejectDescriptor final : public CallInterfaceDescriptor {
1000 public:
1001 DEFINE_PARAMETERS(kGenerator, kValue)
1002 DECLARE_DEFAULT_DESCRIPTOR(AsyncGeneratorRejectDescriptor,
1003 CallInterfaceDescriptor, kParameterCount)
1004 };
1005
1006 class AsyncGeneratorResumeNextDescriptor final
1007 : public CallInterfaceDescriptor {
1008 public:
1009 DEFINE_PARAMETERS(kGenerator)
1010 DECLARE_DEFAULT_DESCRIPTOR(AsyncGeneratorResumeNextDescriptor,
1011 CallInterfaceDescriptor, kParameterCount)
1012 };
1013
1014 class ResolveNativePromiseDescriptor final : public CallInterfaceDescriptor {
1015 public:
1016 DEFINE_PARAMETERS(kPromise, kValue)
1017 DECLARE_DEFAULT_DESCRIPTOR(ResolveNativePromiseDescriptor,
1018 CallInterfaceDescriptor, kParameterCount)
1019 };
1020
1021 class RejectNativePromiseDescriptor final : public CallInterfaceDescriptor {
1022 public:
1023 DEFINE_PARAMETERS(kPromise, kValue, kDebugEvent)
1024 DECLARE_DEFAULT_DESCRIPTOR(RejectNativePromiseDescriptor,
1025 CallInterfaceDescriptor, kParameterCount)
1026 };
1027
1028 class PerformNativePromiseThenDescriptor final
1029 : public CallInterfaceDescriptor {
1030 public:
1031 DEFINE_PARAMETERS(kPromise, kResolveReaction, kRejectReaction, kResultPromise)
1032 DECLARE_DEFAULT_DESCRIPTOR(PerformNativePromiseThenDescriptor,
1033 CallInterfaceDescriptor, kParameterCount)
1034 };
1035
1036 class WasmRuntimeCallDescriptor final : public CallInterfaceDescriptor { 885 class WasmRuntimeCallDescriptor final : public CallInterfaceDescriptor {
1037 public: 886 public:
1038 DEFINE_EMPTY_PARAMETERS() 887 DEFINE_EMPTY_PARAMETERS()
1039 DECLARE_DEFAULT_DESCRIPTOR(WasmRuntimeCallDescriptor, CallInterfaceDescriptor, 888 DECLARE_DEFAULT_DESCRIPTOR(WasmRuntimeCallDescriptor, CallInterfaceDescriptor,
1040 0) 889 0)
1041 }; 890 };
1042 891
892 #define DEFINE_TFS_BUILTIN_DESCRIPTOR(Name, ...) \
893 class Name##Descriptor : public CallInterfaceDescriptor { \
894 public: \
895 DEFINE_PARAMETERS(__VA_ARGS__) \
896 DECLARE_DEFAULT_DESCRIPTOR(Name##Descriptor, CallInterfaceDescriptor, \
897 kParameterCount) \
898 };
899 BUILTIN_LIST_TFS(DEFINE_TFS_BUILTIN_DESCRIPTOR)
900 #undef DEFINE_TFS_BUILTIN_DESCRIPTOR
901
1043 #undef DECLARE_DESCRIPTOR_WITH_BASE 902 #undef DECLARE_DESCRIPTOR_WITH_BASE
1044 #undef DECLARE_DESCRIPTOR 903 #undef DECLARE_DESCRIPTOR
1045 #undef DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE 904 #undef DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE
1046 #undef DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG 905 #undef DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG
1047 #undef DEFINE_PARAMETERS 906 #undef DEFINE_PARAMETERS
1048 907
1049 // We define the association between CallDescriptors::Key and the specialized 908 // We define the association between CallDescriptors::Key and the specialized
1050 // descriptor here to reduce boilerplate and mistakes. 909 // descriptor here to reduce boilerplate and mistakes.
1051 #define DEF_KEY(name) \ 910 #define DEF_KEY(name, ...) \
1052 CallDescriptors::Key name##Descriptor::key() { return CallDescriptors::name; } 911 CallDescriptors::Key name##Descriptor::key() { return CallDescriptors::name; }
1053 INTERFACE_DESCRIPTOR_LIST(DEF_KEY) 912 INTERFACE_DESCRIPTOR_LIST(DEF_KEY)
1054 #undef DEF_KEY 913 #undef DEF_KEY
1055 } // namespace internal 914 } // namespace internal
1056 } // namespace v8 915 } // namespace v8
1057 916
1058 917
1059 #if V8_TARGET_ARCH_ARM64 918 #if V8_TARGET_ARCH_ARM64
1060 #include "src/arm64/interface-descriptors-arm64.h" 919 #include "src/arm64/interface-descriptors-arm64.h"
1061 #elif V8_TARGET_ARCH_ARM 920 #elif V8_TARGET_ARCH_ARM
1062 #include "src/arm/interface-descriptors-arm.h" 921 #include "src/arm/interface-descriptors-arm.h"
1063 #endif 922 #endif
1064 923
1065 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ 924 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_
OLDNEW
« no previous file with comments | « src/ia32/interface-descriptors-ia32.cc ('k') | src/interface-descriptors.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698