{"id":13151,"date":"2022-10-03T04:25:44","date_gmt":"2022-10-02T22:55:44","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/"},"modified":"2022-10-03T04:25:44","modified_gmt":"2022-10-02T22:55:44","slug":"solved-assembly-code-fsqrt-and-fmul-instructions","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/","title":{"rendered":"[Solved] Assembly code fsqrt and fmul instructions"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-35518449\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"35518449\" data-parentid=\"35515378\" data-score=\"7\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"js-endorsements\" data-for-answer=\"35518449\">\n<\/div>\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>It looks like you are trying to do something similar to this:<\/p>\n<pre><code>#include &lt;stdio.h&gt;\n\ndouble hullSpeed(double lgth)\n{\n    double result;\n\n    __asm__(\n            \"fldl %1\\n\\t\" \/\/st(0)=&gt;st(1), st(0)=lgth . FLDL means load double float\n            \"fsqrt\\n\\t\"   \/\/st(0) = square root st(0)\n            \"fmulp\\n\\t\"   \/\/Multiplies st(0) and st(1) (1.34). Result in st(0)\n            : \"=&amp;t\" (result) : \"m\" (lgth), \"0\" (1.34));\n\n    return result;\n}\n\nint main()\n{\n    printf (\"%f\\n\", hullSpeed(64.0));\n}\n<\/code><\/pre>\n<p>The template I used can be simplified, but for demonstration purposes it will suffice. We use <code>\"=&amp;t\"<\/code> constraint since we are returning the result at the top of the floating point stack in <code>st(0)<\/code>, and we use <em>ampersand<\/em> to denote early clobber (we&#8217;ll be using the top of the floating point stack to pass in 1.34). We pass the address of <code>lgth<\/code> with a memory reference via the constraint <code>\"m\" (lgth)<\/code>, and the <code>\"0\"(1.34)<\/code> constraint says we will pass in 1.34 in the same register as parameter 0, which in this case is the top of the floating point stack. These are registers(or memory) that our assembler will overwrite but don&#8217;t appear as an input or output constraint.<\/p>\n<p>Learning assembly language with inline assembler is a very difficult way to learn. The machine constraints specific to <em>x86<\/em> can be found <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/Machine-Constraints.html#Machine-Constraints\">here<\/a> under <em>x86 family<\/em>. Information on the constraint modifiers can be found <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/Modifiers.html#Modifiers\">here<\/a>, and information on <em>GCC<\/em> extended assembler templates can be found <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/Extended-Asm.html#Extended-Asm\">here<\/a>.<\/p>\n<p>I&#8217;m only giving you a starting point, as <em>GCC<\/em>&#8216;s inline assembler usage can be rather complex and any answer may be too broad for a Stackoverflow answer. The fact you are using inline assembler with x87 floating point makes it that much more complex.<\/p>\n<hr>\n<p>Once you have a handle on constraints and modifiers another mechanism that would yield better assembler code by the compiler would be:<\/p>\n<pre><code>__asm__(\n        \"fsqrt\\n\\t\"   \/\/ st(0) = square root st(0)\n        \"fmulp\\n\\t\"   \/\/ Multiplies st(0) and st(1) (1.34). Result in st(0)\n        : \"=t\"(result) : \"0\"(lgth), \"u\" (1.34) : \"st(1)\");\n<\/code><\/pre>\n<p>Hint: Constraint <code>\"u\"<\/code> places a value in x87 floating point register <code>st(1)<\/code>. The assembler template constraints effectively place <code>lgth<\/code> in <code>st(0)<\/code> and 1.34 in <code>st(1)<\/code>. <code>st(1)<\/code> is invalid after the inline assembly is complete so we list it as a clobber. We use the constraints to place our values on the floating point stack for us. This has the effect of reducing the work we have to do inside the assembler code itself.<\/p>\n<hr>\n<p>If you are developing 64-bit applications I highly recommend using SSE\/SSE2 at a minimum for basic floating point calculations. The code above should work on 32-bit and 64-bit. In 64-bit code the x87 floating point instructions are generally not as efficient as SSE\/SSE2, but they will work.<\/p>\n<hr>\n<h2>Rounding with Inline Assembly and x87<\/h2>\n<p>If you are attempting to round based on one of the 4 rounding modes on the x87 you can utilize code like this:<\/p>\n<pre><code>#include &lt;stdint.h&gt;\n#include &lt;stdio.h&gt;\n\n#define RND_CTL_BIT_SHIFT   10\n\ntypedef enum {\n    ROUND_NEAREST_EVEN =    0 &lt;&lt; RND_CTL_BIT_SHIFT,\n    ROUND_MINUS_INF =       1 &lt;&lt; RND_CTL_BIT_SHIFT,\n    ROUND_PLUS_INF =        2 &lt;&lt; RND_CTL_BIT_SHIFT,\n    ROUND_TOWARD_ZERO =     3 &lt;&lt; RND_CTL_BIT_SHIFT\n} RoundingMode;\n\ndouble roundd (double n, RoundingMode mode)\n{\n    uint16_t cw;        \/* Storage for the current x87 control register *\/\n    uint16_t newcw;     \/* Storage for the new value of the control register *\/\n    uint16_t dummyreg;  \/* Temporary dummy register used in the template *\/\n\n    __asm__ __volatile__ (\n            \"fstcw %w[cw]          \\n\\t\" \/* Read current x87 control register into cw*\/\n            \"fwait                 \\n\\t\" \/* Do an fwait after an fstcw instruction *\/\n            \"mov %w[cw],%w[treg]   \\n\\t\" \/* ax = value in cw variable*\/\n            \"and $0xf3ff,%w[treg]  \\n\\t\" \/* Set rounding mode bits 10 and 11 of control\n                                            register to zero*\/\n            \"or %w[rmode],%w[treg] \\n\\t\" \/* Set the rounding mode bits *\/\n            \"mov %w[treg],%w[newcw]\\n\\t\" \/* newcw = value for new control reg value*\/\n            \"fldcw %w[newcw]       \\n\\t\" \/* Set control register to newcw *\/\n            \"frndint               \\n\\t\" \/* st(0) = round(st(0)) *\/\n            \"fldcw %w[cw]          \\n\\t\" \/* restore control reg to orig value in cw*\/\n            : [cw]\"=m\"(cw),\n              [newcw]\"=m\"(newcw),\n              [treg]\"=&amp;r\"(dummyreg),  \/* Register constraint with dummy variable\n                                         allows compiler to choose available register *\/\n              [n]\"+t\"(n)              \/* +t constraint passes `n` through \n                                         top of FPU stack (st0) for both input&amp;output*\/\n            : [rmode]\"rmi\"((uint16_t)mode)); \/* \"g\" constraint same as \"rmi\" *\/\n\n    return n;\n}\n\ndouble hullSpeed(double lgth)\n{\n    double result;\n\n    __asm__(\n            \"fsqrt\\n\\t\"   \/\/ st(0) = square root st(0)\n            \"fmulp\\n\\t\"   \/\/ Multiplies st(0) and st(1) (1.34). Result in st(0)\n            : \"=t\"(result) : \"0\"(lgth), \"u\" (1.34) : \"st(1)\");\n    \n    return result;\n}\n\nint main()\n{\n    double dbHullSpeed = hullSpeed(64.0);\n    printf (\"%f, %f\\n\", dbHullSpeed, roundd(dbHullSpeed, ROUND_NEAREST_EVEN));\n    printf (\"%f, %f\\n\", dbHullSpeed, roundd(dbHullSpeed, ROUND_MINUS_INF));\n    printf (\"%f, %f\\n\", dbHullSpeed, roundd(dbHullSpeed, ROUND_PLUS_INF));\n    printf (\"%f, %f\\n\", dbHullSpeed, roundd(dbHullSpeed, ROUND_TOWARD_ZERO));\n    return 0;\n}\n<\/code><\/pre>\n<p>As you pointed out in the comments, there was equivalent code in this Stackoverflow answer but it used multiple <code>__asm__<\/code> statements and you were curious how a single <code>__asm__<\/code> statement could be coded.<\/p>\n<p>The rounding modes (0,1,2,3) can be found in the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/www.intel.com\/content\/dam\/www\/public\/us\/en\/documents\/manuals\/64-ia-32-architectures-software-developer-manual-325462.pdf\">Intel Architecture Document<\/a>:<\/p>\n<blockquote>\n<p>Rounding Mode RC Field<\/p>\n<p>00B Rounded result is the closest to the infinitely precise result. If two values are equally close, the result is the even value (that is, the one with the least-significant bit of zero). Default Round down (toward \u2212\u221e)<\/p>\n<p>01B Rounded result is closest to but no greater than the infinitely precise result. Round up (toward +\u221e)<\/p>\n<p>10B Rounded result is closest to but no less than the infinitely precise result.Round toward zero (Truncate)<\/p>\n<p>11B Rounded result is closest to but no greater in absolute value than the infinitely precise result.<\/p>\n<\/blockquote>\n<p>In section 8.1.5 (rounding mode specifically described in section 8.1.5.3) there is a description of the fields. The 4 rounding modes are defined in figure 4-8 under section 4.8.4.<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">1<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Assembly code fsqrt and fmul instructions <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] It looks like you are trying to do something similar to this: #include &lt;stdio.h&gt; double hullSpeed(double lgth) { double result; __asm__( &#8220;fldl %1\\n\\t&#8221; \/\/st(0)=&gt;st(1), st(0)=lgth . FLDL means load double float &#8220;fsqrt\\n\\t&#8221; \/\/st(0) = square root st(0) &#8220;fmulp\\n\\t&#8221; \/\/Multiplies st(0) and st(1) (1.34). Result in st(0) : &#8220;=&amp;t&#8221; (result) : &#8220;m&#8221; (lgth), &#8220;0&#8221; (1.34)); &#8230; <a title=\"[Solved] Assembly code fsqrt and fmul instructions\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/\" aria-label=\"More on [Solved] Assembly code fsqrt and fmul instructions\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[465,324,608,2131,523],"class_list":["post-13151","post","type-post","status-publish","format-standard","hentry","category-solved","tag-assembly","tag-c","tag-gcc","tag-inline-assembly","tag-x86"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Assembly code fsqrt and fmul instructions - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Assembly code fsqrt and fmul instructions - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] It looks like you are trying to do something similar to this: #include &lt;stdio.h&gt; double hullSpeed(double lgth) { double result; __asm__( &quot;fldl %1nt&quot; \/\/st(0)=&gt;st(1), st(0)=lgth . FLDL means load double float &quot;fsqrtnt&quot; \/\/st(0) = square root st(0) &quot;fmulpnt&quot; \/\/Multiplies st(0) and st(1) (1.34). Result in st(0) : &quot;=&amp;t&quot; (result) : &quot;m&quot; (lgth), &quot;0&quot; (1.34)); ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-02T22:55:44+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Assembly code fsqrt and fmul instructions\",\"datePublished\":\"2022-10-02T22:55:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/\"},\"wordCount\":557,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"assembly\",\"c++\",\"gcc\",\"inline-assembly\",\"x86\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/\",\"name\":\"[Solved] Assembly code fsqrt and fmul instructions - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-10-02T22:55:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Assembly code fsqrt and fmul instructions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Assembly code fsqrt and fmul instructions - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Assembly code fsqrt and fmul instructions - JassWeb","og_description":"[ad_1] It looks like you are trying to do something similar to this: #include &lt;stdio.h&gt; double hullSpeed(double lgth) { double result; __asm__( \"fldl %1nt\" \/\/st(0)=&gt;st(1), st(0)=lgth . FLDL means load double float \"fsqrtnt\" \/\/st(0) = square root st(0) \"fmulpnt\" \/\/Multiplies st(0) and st(1) (1.34). Result in st(0) : \"=&amp;t\" (result) : \"m\" (lgth), \"0\" (1.34)); ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/","og_site_name":"JassWeb","article_published_time":"2022-10-02T22:55:44+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Assembly code fsqrt and fmul instructions","datePublished":"2022-10-02T22:55:44+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/"},"wordCount":557,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["assembly","c++","gcc","inline-assembly","x86"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/","url":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/","name":"[Solved] Assembly code fsqrt and fmul instructions - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-10-02T22:55:44+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-assembly-code-fsqrt-and-fmul-instructions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Assembly code fsqrt and fmul instructions"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/13151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=13151"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/13151\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=13151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=13151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=13151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}