- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Dear experts,
I'm not experienced in assembly, so I would appreciate it if you could help correlate the following assembly to the oneliner source.
source:
T localDistance = surfaceList[surfaceInnerIndex - 1]->CalculateDistance(attr->position, attr->direction, isCoincident);
// each element of the surfaceList is a surface object
// CalculateDistance() is a virtual function
corresponding assembly:
1 movq 0x20(%r13), %r10 2 movq -0x8(%r10,%r9,8), %rdi 3 lea 0x1b0(%rsp), %rsi 4 movq (%rdi), %r11 0 5 lea 0x1c8(%rsp), %rdx 6 callq (%r11) 0
I understand that, for example, line 2 is copying mem[r10 - 8 + 8 * r9] to rdi, but what is the corresponding operation in the source? Thanks for any hints.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I understand that, for example, line 2 is copying mem[r10 - 8 + 8 * r9] to rdi, but what is the corresponding operation in the source?
Without seeing the class declarations and a bit more of the code so that we can work out what is in which register it's a bit hard to tell, but my guess (based on the -8 offset) is that that is the load of surfaceList[surfaceInnerIndex - 1]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi James,
Thanks for your reply. Below is the class declaration. The surfaceList is a std::vector<Surface<double>*> of pointers each pointing to a derived-class surface. Please let me know if other code snippets are necessary.
enum class SurfaceType { SXPlane, SYPlane, SZPlane, SXCylinder, SYCylinder, SZCylinder, SSphere, }; template<typename T> class Surface { public: int index; int innerIndex; SurfaceType surfaceType; std::vector<int> positiveCellInnerIndexList; std::vector<int> negativeCellInnerIndexList; Sense CalculateSense(const Vector3<T>& position, const Vector3<T>& direction); virtual T CalculateDistance(const Vector3<T>& position, const Vector3<T>& direction, bool isCoincident) = 0; virtual T EvaluateSurfaceEquation(const Vector3<T>& position) = 0; virtual Vector3<T> CalculateNormal(const Vector3<T>& position) = 0; virtual size_t GetClassSize(); };
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page